You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/scripts/llm_txt.py

69 lines
2.2 KiB

import os
from pathlib import Path
def concat_all_md_files(root_dir, output_filename="llm.txt"):
"""
Recursively searches for all .md files in directory and subdirectories,
then concatenates them into a single output file.
Args:
root_dir (str): Root directory to search for .md files
output_filename (str): Name of output file (default: llm.txt)
Returns:
str: Path to the created output file
"""
try:
root_dir = Path(root_dir).resolve()
if not root_dir.is_dir():
raise ValueError(f"Directory not found: {root_dir}")
# Collect all .md files recursively
md_files = []
for root, _, files in os.walk(root_dir):
for file in files:
if file.lower().endswith(".md"):
full_path = Path(root) / file
md_files.append(full_path)
if not md_files:
print(
f"No .md files found in {root_dir} or its subdirectories"
)
return None
# Create output file in root directory
output_path = root_dir / output_filename
with open(output_path, "w", encoding="utf-8") as outfile:
for md_file in sorted(md_files):
try:
# Get relative path for header
rel_path = md_file.relative_to(root_dir)
with open(
md_file, "r", encoding="utf-8"
) as infile:
content = infile.read()
outfile.write(f"# File: {rel_path}\n\n")
outfile.write(content)
outfile.write(
"\n\n" + "-" * 50 + "\n\n"
) # Separator
except Exception as e:
print(f"Error processing {rel_path}: {str(e)}")
continue
print(
f"Created {output_path} with {len(md_files)} files merged"
)
return str(output_path)
except Exception as e:
print(f"Fatal error: {str(e)}")
return None
if __name__ == "__main__":
concat_all_md_files("docs")