Spaces:
Runtime error
Runtime error
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" | |
@Time : 2023/7/4 10:53 | |
@Author : alexanderwu | |
@File : mermaid.py | |
@From : https://github.com/geekan/MetaGPT/blob/main/metagpt/utils/mermaid.py | |
""" | |
import os | |
import subprocess | |
from pathlib import Path | |
from autoagents.system.const import PROJECT_ROOT | |
from autoagents.system.logs import logger | |
from .common import check_cmd_exists | |
IS_DOCKER = os.environ.get('AM_I_IN_A_DOCKER_CONTAINER', 'false').lower() | |
def mermaid_to_file(mermaid_code, output_file_without_suffix, width=2048, height=2048) -> int: | |
"""suffix: png/svg/pdf | |
:param mermaid_code: mermaid code | |
:param output_file_without_suffix: output filename | |
:param width: | |
:param height: | |
:return: 0 if succed, -1 if failed | |
""" | |
# Write the Mermaid code to a temporary file | |
tmp = Path(f'{output_file_without_suffix}.mmd') | |
tmp.write_text(mermaid_code, encoding='utf-8') | |
if check_cmd_exists('mmdc') != 0: | |
logger.warning( | |
"RUN `npm install -g @mermaid-js/mermaid-cli` to install mmdc") | |
return -1 | |
for suffix in ['pdf', 'svg', 'png']: | |
output_file = f'{output_file_without_suffix}.{suffix}' | |
# Call the `mmdc` command to convert the Mermaid code to a PNG | |
logger.info(f"Generating {output_file}..") | |
if IS_DOCKER == 'true': | |
subprocess.run(['mmdc', '-p', '/app/autoagents/puppeteer-config.json', '-i', | |
str(tmp), '-o', output_file, '-w', str(width), '-H', str(height)]) | |
else: | |
subprocess.run(['mmdc', '-i', str(tmp), '-o', | |
output_file, '-w', str(width), '-H', str(height)]) | |
return 0 | |
MMC1 = """classDiagram | |
class Main { | |
-SearchEngine search_engine | |
+main() str | |
} | |
class SearchEngine { | |
-Index index | |
-Ranking ranking | |
-Summary summary | |
+search(query: str) str | |
} | |
class Index { | |
-KnowledgeBase knowledge_base | |
+create_index(data: dict) | |
+query_index(query: str) list | |
} | |
class Ranking { | |
+rank_results(results: list) list | |
} | |
class Summary { | |
+summarize_results(results: list) str | |
} | |
class KnowledgeBase { | |
+update(data: dict) | |
+fetch_data(query: str) dict | |
} | |
Main --> SearchEngine | |
SearchEngine --> Index | |
SearchEngine --> Ranking | |
SearchEngine --> Summary | |
Index --> KnowledgeBase""" | |
MMC2 = """sequenceDiagram | |
participant M as Main | |
participant SE as SearchEngine | |
participant I as Index | |
participant R as Ranking | |
participant S as Summary | |
participant KB as KnowledgeBase | |
M->>SE: search(query) | |
SE->>I: query_index(query) | |
I->>KB: fetch_data(query) | |
KB-->>I: return data | |
I-->>SE: return results | |
SE->>R: rank_results(results) | |
R-->>SE: return ranked_results | |
SE->>S: summarize_results(ranked_results) | |
S-->>SE: return summary | |
SE-->>M: return summary""" | |
if __name__ == '__main__': | |
# logger.info(print_members(print_members)) | |
mermaid_to_file(MMC1, PROJECT_ROOT / 'tmp/1.png') | |
mermaid_to_file(MMC2, PROJECT_ROOT / 'tmp/2.png') | |