Spaces:
Build error
Build error
| """ | |
| Advanced file reader tool with additional features. | |
| """ | |
| import os | |
| from typing import Optional, List | |
| from langchain_core.tools import tool | |
| from pydantic import BaseModel, Field | |
| class AdvancedFileReaderInput(BaseModel): | |
| """Input schema for advanced file reader tool.""" | |
| filename: str = Field(description="Path to the file to read") | |
| lines: int = Field(default=-1, description="Number of lines to read (-1 for all)") | |
| encoding: str = Field(default="utf-8", description="File encoding") | |
| start_line: int = Field(default=1, description="Starting line number (1-based)") | |
| def advanced_file_reader( | |
| filename: str, | |
| lines: int = -1, | |
| encoding: str = "utf-8", | |
| start_line: int = 1 | |
| ) -> str: | |
| """ | |
| Advanced file reader with support for encoding and line ranges. | |
| Args: | |
| filename (str): Path to the file to read | |
| lines (int): Number of lines to read (-1 for all) | |
| encoding (str): File encoding | |
| start_line (int): Starting line number (1-based) | |
| Returns: | |
| str: File contents or error message | |
| """ | |
| try: | |
| if not os.path.exists(filename): | |
| return f"Error: File not found: {filename}" | |
| with open(filename, 'r', encoding=encoding) as f: | |
| # Skip to start line | |
| for _ in range(start_line - 1): | |
| f.readline() | |
| if lines == -1: | |
| return f.read() | |
| else: | |
| return ''.join(f.readline() for _ in range(lines)) | |
| except Exception as e: | |
| return f"Error reading file: {str(e)}" |