Source code for autorag.data.parse.llamaparse

import os
from typing import List, Tuple
from itertools import chain

from llama_parse import LlamaParse

from autorag.data.parse.base import parser_node
from autorag.utils.util import process_batch, get_event_loop


[docs] @parser_node def llama_parse( data_path_list: List[str], batch: int = 8, use_vendor_multimodal_model: bool = False, vendor_multimodal_model_name: str = "openai-gpt4o", use_own_key: bool = False, vendor_multimodal_api_key: str = None, **kwargs, ) -> Tuple[List[str], List[str], List[int]]: """ Parse documents to use llama_parse. LLAMA_CLOUD_API_KEY environment variable should be set. You can get the key from https://cloud.llamaindex.ai/api-key :param data_path_list: The list of data paths to parse. :param batch: The batch size for parse documents. Default is 8. :param use_vendor_multimodal_model: Whether to use the vendor multimodal model. Default is False. :param vendor_multimodal_model_name: The name of the vendor multimodal model. Default is "openai-gpt4o". :param use_own_key: Whether to use the own API key. Default is False. :param vendor_multimodal_api_key: The API key for the vendor multimodal model. :param kwargs: The extra parameters for creating the llama_parse instance. :return: tuple of lists containing the parsed texts, path and pages. """ if use_vendor_multimodal_model: kwargs = _add_multimodal_params( kwargs, use_vendor_multimodal_model, vendor_multimodal_model_name, use_own_key, vendor_multimodal_api_key, ) parse_instance = LlamaParse(**kwargs) tasks = [ llama_parse_pure(data_path, parse_instance) for data_path in data_path_list ] loop = get_event_loop() results = loop.run_until_complete(process_batch(tasks, batch)) del parse_instance texts, path, pages = (list(chain.from_iterable(item)) for item in zip(*results)) return texts, path, pages
[docs] async def llama_parse_pure( data_path: str, parse_instance ) -> Tuple[List[str], List[str], List[int]]: documents = await parse_instance.aload_data(data_path) texts = list(map(lambda x: x.text, documents)) path = [data_path] * len(texts) pages = list(range(1, len(documents) + 1)) return texts, path, pages
def _add_multimodal_params( kwargs, use_vendor_multimodal_model, vendor_multimodal_model_name, use_own_key, vendor_multimodal_api_key, ) -> dict: kwargs["use_vendor_multimodal_model"] = use_vendor_multimodal_model kwargs["vendor_multimodal_model_name"] = vendor_multimodal_model_name def set_multimodal_api_key( multimodal_model_name: str = "openai-gpt4o", _api_key: str = None ) -> str: if multimodal_model_name in ["openai-gpt4o", "openai-gpt-4o-mini"]: _api_key = ( os.getenv("OPENAI_API_KEY", None) if _api_key is None else _api_key ) if _api_key is None: raise KeyError( "Please set the OPENAI_API_KEY in the environment variable OPENAI_API_KEY " "or directly set it on the config YAML file." ) elif multimodal_model_name in ["anthropic-sonnet-3.5"]: _api_key = ( os.getenv("ANTHROPIC_API_KEY", None) if _api_key is None else _api_key ) if _api_key is None: raise KeyError( "Please set the ANTHROPIC_API_KEY in the environment variable ANTHROPIC_API_KEY " "or directly set it on the config YAML file." ) elif multimodal_model_name in ["gemini-1.5-flash", "gemini-1.5-pro"]: _api_key = ( os.getenv("GEMINI_API_KEY", None) if _api_key is None else _api_key ) if _api_key is None: raise KeyError( "Please set the GEMINI_API_KEY in the environment variable GEMINI_API_KEY " "or directly set it on the config YAML file." ) elif multimodal_model_name in ["custom-azure-model"]: raise NotImplementedError( "Custom Azure multimodal model is not supported yet." ) else: raise ValueError("Invalid multimodal model name.") return _api_key if use_own_key: api_key = set_multimodal_api_key( vendor_multimodal_model_name, vendor_multimodal_api_key ) kwargs["vendor_multimodal_api_key"] = api_key return kwargs