Spaces:
Runtime error
Runtime error
| """ | |
| Simple agent to analyse a markdown, just to test some ideas. | |
| """ | |
| from enum import Enum | |
| from mistralai import OCRResponse | |
| from smolagents import CodeAgent, LiteLLMModel | |
| from deepengineer.webcrawler.pdf_utils import ( | |
| convert_ocr_response_to_markdown, | |
| find_in_markdown, | |
| get_markdown_by_page_numbers, | |
| get_table_of_contents_per_page_markdown, | |
| ) | |
| from deepengineer.logging_tools import LoggingTool | |
| class ToolNames(Enum): | |
| GET_TABLE_OF_CONTENTS = "get_table_of_contents" | |
| GET_MARKDOWN = "get_markdown" | |
| GET_PAGES_CONTENT = "get_pages_content" | |
| FIND_IN_MARKDOWN = "find_in_markdown" | |
| class GetTableOfContentsTool(LoggingTool): | |
| name = ToolNames.GET_TABLE_OF_CONTENTS.value | |
| description = "Returns all of the titles in the document along with the page number they are on." | |
| inputs = {} | |
| output_type = "string" | |
| def __init__(self, markdown: OCRResponse): | |
| super().__init__() | |
| self.markdown: OCRResponse = markdown | |
| self.table_of_contents: str = get_table_of_contents_per_page_markdown( | |
| self.markdown | |
| ) | |
| def forward(self) -> str: | |
| return self.table_of_contents | |
| class GetMarkdownTool(LoggingTool): | |
| name = ToolNames.GET_MARKDOWN.value | |
| description = f"Returns the markdown entire content of the document. Beware this might be too long to be useful, except for small documents, use {ToolNames.GET_PAGES_CONTENT.value} instead. You can use {ToolNames.GET_TABLE_OF_CONTENTS.value} to get the table of contents of the document including the number of pages." | |
| inputs = {} | |
| output_type = "string" | |
| def __init__(self, markdown: OCRResponse): | |
| super().__init__() | |
| self.markdown: OCRResponse = markdown | |
| self.markdown_content: str = convert_ocr_response_to_markdown(self.markdown) | |
| def forward(self) -> str: | |
| return self.markdown_content | |
| class GetPagesContentTool(LoggingTool): | |
| name = ToolNames.GET_PAGES_CONTENT.value | |
| description = f"Returns the content of the pages. You can use {ToolNames.GET_TABLE_OF_CONTENTS.value} to get the table of contents of the document including the number of pages. Expects a list of page numbers as integers as input." | |
| inputs = { | |
| "page_numbers": { | |
| "type": "array", | |
| "description": "The page numbers to get the content of.", | |
| }, | |
| } | |
| output_type = "string" | |
| def __init__(self, markdown: OCRResponse): | |
| super().__init__() | |
| self.markdown: OCRResponse = markdown | |
| def forward(self, page_numbers: list[int]) -> str: | |
| return get_markdown_by_page_numbers(self.markdown, page_numbers) | |
| class FindInMarkdownTool(LoggingTool): | |
| name = ToolNames.FIND_IN_MARKDOWN.value | |
| description = f"Finds the page numbers of the document that contain the search queries. If you are looking for a specific information, you can use this tool to find the page numbers of the document that contain the information and then use {ToolNames.GET_PAGES_CONTENT.value} to get the content of the pages." | |
| inputs = { | |
| "search_queries": { | |
| "type": "array", | |
| "description": "The search queries to find in the document. List of strings.", | |
| } | |
| } | |
| output_type = "array" | |
| def __init__(self, markdown: OCRResponse): | |
| super().__init__() | |
| self.markdown: OCRResponse = markdown | |
| def forward(self, search_queries: list[str]) -> list[int]: | |
| return find_in_markdown(self.markdown, search_queries) | |
| def create_agent(markdown: OCRResponse, model_id="deepseek/deepseek-chat"): | |
| """This agent is just a test and will not be used as is by the main agent.""" | |
| model = LiteLLMModel(model_id=model_id) | |
| MARKDOWN_TOOLS = [ | |
| GetTableOfContentsTool(markdown), | |
| GetMarkdownTool(markdown), | |
| GetPagesContentTool(markdown), | |
| FindInMarkdownTool(markdown), | |
| ] | |
| markdown_agent = CodeAgent( | |
| model=model, | |
| tools=MARKDOWN_TOOLS, | |
| max_steps=20, | |
| verbosity_level=2, | |
| planning_interval=4, | |
| name="markdown_agent", | |
| description="""A team member that can analyse a markdown.""", | |
| ) | |
| markdown_agent.prompt_templates["managed_agent"][ | |
| "task" | |
| ] += """You can navigate to .txt online files.""" | |
| return markdown_agent | |