SYMBOL INDEX (115 symbols across 4 files) FILE: pageindex/page_index.py function check_title_appearance (line 13) | async def check_title_appearance(item, page_list, start_index=1, model=N... function check_title_appearance_in_start (line 48) | async def check_title_appearance_in_start(title, page_text, model=None, ... function check_title_appearance_in_start_concurrent (line 74) | async def check_title_appearance_in_start_concurrent(structure, page_lis... function toc_detector_single_page (line 104) | def toc_detector_single_page(content, model=None): function check_if_toc_extraction_is_complete (line 125) | def check_if_toc_extraction_is_complete(content, toc, model=None): function check_if_toc_transformation_is_complete (line 143) | def check_if_toc_transformation_is_complete(content, toc, model=None): function extract_toc_content (line 160) | def extract_toc_content(content, model=None): function detect_page_index (line 202) | def detect_page_index(toc_content, model=None): function toc_extractor (line 222) | def toc_extractor(page_list, toc_page_list, model): function toc_index_extractor (line 243) | def toc_index_extractor(toc, content, model=None): function toc_transformer (line 273) | def toc_transformer(toc_content, model=None): function find_toc_pages (line 336) | def find_toc_pages(start_page_index, page_list, opt, logger=None): function remove_page_number (line 363) | def remove_page_number(data): function extract_matching_page_pairs (line 374) | def extract_matching_page_pairs(toc_page, toc_physical_index, start_page... function calculate_page_offset (line 389) | def calculate_page_offset(pairs): function add_page_offset_to_toc_json (line 411) | def add_page_offset_to_toc_json(data, offset): function page_list_to_group_text (line 421) | def page_list_to_group_text(page_contents, token_lengths, max_tokens=200... function add_page_number_to_toc (line 456) | def add_page_number_to_toc(part, structure, model=None): function remove_first_physical_index_section (line 489) | def remove_first_physical_index_section(text): function generate_toc_continue (line 502) | def generate_toc_continue(toc_content, part, model="gpt-4o-2024-11-20"): function generate_toc_init (line 537) | def generate_toc_init(part, model=None): function process_no_toc (line 571) | def process_no_toc(page_list, start_index=1, model=None, logger=None): function process_toc_no_page_numbers (line 592) | def process_toc_no_page_numbers(toc_content, toc_page_list, page_list, ... function process_toc_with_page_numbers (line 617) | def process_toc_with_page_numbers(toc_content, toc_page_list, page_list,... function process_none_page_numbers (line 651) | def process_none_page_numbers(toc_items, page_list, start_index=1, model... function check_toc (line 691) | def check_toc(page_list, opt=None): function single_toc_item_index_fixer (line 735) | def single_toc_item_index_fixer(section_title, content, model="gpt-4o-20... function fix_incorrect_toc (line 755) | async def fix_incorrect_toc(toc_with_page_number, page_list, incorrect_r... function fix_incorrect_toc_with_retries (line 873) | async def fix_incorrect_toc_with_retries(toc_with_page_number, page_list... function verify_toc (line 895) | async def verify_toc(page_list, list_result, start_index=1, N=None, mode... function meta_processor (line 954) | async def meta_processor(page_list, mode=None, toc_content=None, toc_pag... function process_large_node_recursively (line 995) | async def process_large_node_recursively(node, page_list, opt=None, logg... function tree_parser (line 1024) | async def tree_parser(page_list, opt, doc=None, logger=None): function page_index_main (line 1061) | def page_index_main(doc, opt=None): function page_index (line 1106) | def page_index(doc, model=None, toc_check_page_num=None, max_page_num_ea... function validate_and_truncate_physical_indices (line 1117) | def validate_and_truncate_physical_indices(toc_with_page_number, page_li... FILE: pageindex/page_index_md.py function get_node_summary (line 10) | async def get_node_summary(node, summary_token_threshold=200, model=None): function generate_summaries_for_structure_md (line 19) | async def generate_summaries_for_structure_md(structure, summary_token_t... function extract_nodes_from_markdown (line 32) | def extract_nodes_from_markdown(markdown_content): function extract_node_text_content (line 62) | def extract_node_text_content(node_list, markdown_lines): function update_node_list_with_text_token_count (line 89) | def update_node_list_with_text_token_count(node_list, model=None): function tree_thinning_for_index (line 135) | def tree_thinning_for_index(node_list, min_node_token=None, model=None): function build_tree_from_nodes (line 190) | def build_tree_from_nodes(node_list): function clean_tree_for_output (line 224) | def clean_tree_for_output(tree_nodes): function md_to_tree (line 243) | async def md_to_tree(md_path, if_thinning=False, min_token_threshold=Non... FILE: pageindex/utils.py function count_tokens (line 22) | def count_tokens(text, model=None): function ChatGPT_API_with_finish_reason (line 29) | def ChatGPT_API_with_finish_reason(model, prompt, api_key=CHATGPT_API_KE... function ChatGPT_API (line 61) | def ChatGPT_API(model, prompt, api_key=CHATGPT_API_KEY, chat_history=None): function ChatGPT_API_async (line 89) | async def ChatGPT_API_async(model, prompt, api_key=CHATGPT_API_KEY): function get_json_content (line 111) | def get_json_content(response): function extract_json (line 125) | def extract_json(content): function write_node_id (line 158) | def write_node_id(data, node_id=0): function get_nodes (line 170) | def get_nodes(structure): function structure_to_list (line 185) | def structure_to_list(structure): function get_leaf_nodes (line 199) | def get_leaf_nodes(structure): function is_leaf_node (line 217) | def is_leaf_node(data, node_id): function get_last_node (line 243) | def get_last_node(structure): function extract_text_from_pdf (line 247) | def extract_text_from_pdf(pdf_path): function get_pdf_title (line 256) | def get_pdf_title(pdf_path): function get_text_of_pages (line 262) | def get_text_of_pages(pdf_path, start_page, end_page, tag=True): function get_first_start_page_from_text (line 274) | def get_first_start_page_from_text(text): function get_last_start_page_from_text (line 281) | def get_last_start_page_from_text(text): function sanitize_filename (line 292) | def sanitize_filename(filename, replacement='-'): function get_pdf_name (line 297) | def get_pdf_name(pdf_path): class JsonLogger (line 309) | class JsonLogger: method __init__ (line 310) | def __init__(self, file_path): method log (line 320) | def log(self, level, message, **kwargs): method info (line 331) | def info(self, message, **kwargs): method error (line 334) | def error(self, message, **kwargs): method debug (line 337) | def debug(self, message, **kwargs): method exception (line 340) | def exception(self, message, **kwargs): method _filepath (line 344) | def _filepath(self): function list_to_tree (line 350) | def list_to_tree(data): function add_preface_if_needed (line 398) | def add_preface_if_needed(data): function get_page_tokens (line 413) | def get_page_tokens(pdf_path, model="gpt-4o-2024-11-20", pdf_parser="PyP... function get_text_of_pdf_pages (line 441) | def get_text_of_pdf_pages(pdf_pages, start_page, end_page): function get_text_of_pdf_pages_with_labels (line 447) | def get_text_of_pdf_pages_with_labels(pdf_pages, start_page, end_page): function get_number_of_pages (line 453) | def get_number_of_pages(pdf_path): function post_processing (line 460) | def post_processing(structure, end_physical_index): function clean_structure_post (line 481) | def clean_structure_post(data): function remove_fields (line 493) | def remove_fields(data, fields=['text']): function print_toc (line 501) | def print_toc(tree, indent=0): function print_json (line 507) | def print_json(data, max_len=40, indent=2): function remove_structure_text (line 522) | def remove_structure_text(data): function check_token_limit (line 533) | def check_token_limit(structure, limit=110000): function convert_physical_index_to_int (line 545) | def convert_physical_index_to_int(data): function convert_page_to_int (line 568) | def convert_page_to_int(data): function add_node_text (line 579) | def add_node_text(node, pdf_pages): function add_node_text_with_labels (line 592) | def add_node_text_with_labels(node, pdf_pages): function generate_node_summary (line 605) | async def generate_node_summary(node, model=None): function generate_summaries_for_structure (line 616) | async def generate_summaries_for_structure(structure, model=None): function create_clean_structure_for_description (line 626) | def create_clean_structure_for_description(structure): function generate_doc_description (line 649) | def generate_doc_description(structure, model=None): function reorder_dict (line 661) | def reorder_dict(data, key_order): function format_structure (line 667) | def format_structure(structure, order=None): class ConfigLoader (line 681) | class ConfigLoader: method __init__ (line 682) | def __init__(self, default_path: str = None): method _load_yaml (line 688) | def _load_yaml(path): method _validate_keys (line 692) | def _validate_keys(self, user_dict): method load (line 697) | def load(self, user_opt=None) -> config: FILE: scripts/autoclose-labeled-issues.js constant GITHUB_TOKEN (line 22) | const GITHUB_TOKEN = process.env.GITHUB_TOKEN; constant REPO_OWNER (line 23) | const REPO_OWNER = process.env.REPO_OWNER; constant REPO_NAME (line 24) | const REPO_NAME = process.env.REPO_NAME; constant DRY_RUN (line 25) | const DRY_RUN = process.env.DRY_RUN === 'true'; constant THREE_DAYS_MS (line 27) | const THREE_DAYS_MS = 3 * 24 * 60 * 60 * 1000; function githubRequest (line 29) | function githubRequest(method, path, body = null, retried = false) { function fetchDuplicateIssues (line 91) | async function fetchDuplicateIssues() { function isBot (line 109) | function isBot(user) { function findDuplicateComment (line 116) | function findDuplicateComment(comments) { function hasHumanCommentAfter (line 125) | function hasHumanCommentAfter(comments, afterDate) { function fetchAllComments (line 136) | async function fetchAllComments(issueNumber) { function hasThumbsDownReaction (line 155) | async function hasThumbsDownReaction(commentId) { function closeAsDuplicate (line 166) | async function closeAsDuplicate(issueNumber) { function processIssue (line 185) | async function processIssue(issue) { function main (line 231) | async function main() {