{"id":30130,"date":"2025-01-16T02:36:40","date_gmt":"2025-01-16T02:36:40","guid":{"rendered":"https:\/\/peraltafinancing.com\/analytics\/multimodal-financial-report-generation-using-llamaindex\/"},"modified":"2025-01-16T02:36:40","modified_gmt":"2025-01-16T02:36:40","slug":"multimodal-financial-report-generation-using-llamaindex","status":"publish","type":"post","link":"https:\/\/fivemor.com\/?p=30130","title":{"rendered":"Multimodal Financial Report Generation using Llamaindex"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"article-start\">\n<p>In many real-world applications, data is not purely textual\u2014it may include images, tables, and charts that help reinforce the narrative. A multimodal report generator allows you to incorporate both text and images into a final output, making your reports more dynamic and visually rich.<\/p>\n<p>This article outlines how to build such a pipeline using:<\/p>\n<ul class=\"wp-block-list\">\n<li><b><a href=\"https:\/\/www.analyticsvidhya.com\/blog\/2023\/10\/rag-pipeline-with-the-llama-index\/\" target=\"_blank\" rel=\"noreferrer noopener\">LlamaIndex<\/a><\/b> for orchestrating document parsing and query engines,<\/li>\n<li><b>OpenAI<\/b> language models for textual analysis,<\/li>\n<li><b>LlamaParse<\/b> to extract both text and images from PDF documents,<\/li>\n<li>An observability setup using <b>Arize Phoenix (via LlamaTrace)<\/b> for logging and debugging.<\/li>\n<\/ul>\n<p>The end result is a pipeline that can process an entire PDF slide deck\u2014both text and visuals\u2014and generate a structured report containing both text and images.<\/p>\n<h4 class=\"wp-block-heading\" id=\"h-learning-objectives\">Learning Objectives<\/h4>\n<ul class=\"wp-block-list\">\n<li>Understand how to integrate text and visuals for effective financial report generation using multimodal pipelines.<\/li>\n<li>Learn to utilize LlamaIndex and LlamaParse for enhanced financial report generation with structured outputs.<\/li>\n<li>Explore LlamaParse for extracting both text and images from PDF documents effectively.<\/li>\n<li>Set up observability using Arize Phoenix (via LlamaTrace) for logging and debugging complex pipelines.<\/li>\n<li>Create a structured query engine to generate reports that interleave text summaries with visual elements.<\/li>\n<\/ul>\n<p><em><strong>This article was published as a part of the\u00a0<\/strong><\/em><a href=\"https:\/\/www.analyticsvidhya.com\/datahack\/blogathon\" target=\"_blank\" rel=\"noreferrer noopener\"><em><strong>Data Science Blogathon.<\/strong><\/em><\/a><\/p>\n<h2 class=\"wp-block-heading\" id=\"h-overview-of-the-process\">Overview of the Process<\/h2>\n<p>Building a multimodal report generator involves creating a pipeline that seamlessly integrates textual and visual elements from complex documents like PDFs. The process starts with installing the necessary libraries, such as LlamaIndex for document parsing and query orchestration, and LlamaParse for extracting both text and images. Observability is established using Arize Phoenix (via LlamaTrace) to monitor and debug the pipeline.<\/p>\n<p>Once the setup is complete, the pipeline processes a PDF document, parsing its content into structured text and rendering visual elements like tables and charts. These parsed elements are then associated, creating a unified dataset. A SummaryIndex is built to enable high-level insights, and a structured query engine is developed to generate reports that blend textual analysis with relevant visuals. The result is a dynamic and interactive report generator that transforms static documents into rich, multimodal outputs tailored for user queries.<\/p>\n<h2 class=\"wp-block-heading\" id=\"h-step-by-step-implementation\">Step-by-Step Implementation<\/h2>\n<p>Follow this detailed guide to build a multimodal report generator, from setting up dependencies to generating structured outputs with integrated text and images. Each step ensures a seamless integration of LlamaIndex, LlamaParse, and Arize Phoenix for an efficient and dynamic pipeline.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-1-install-and-import-dependencies\">Step 1: Install and Import Dependencies<\/h3>\n<p>You\u2019ll need the following libraries running on <a href=\"https:\/\/www.analyticsvidhya.com\/blog\/2016\/01\/complete-tutorial-learn-data-science-python-scratch-2\/\" target=\"_blank\" rel=\"noreferrer noopener\">Python<\/a> 3.9.9 :<\/p>\n<ul class=\"wp-block-list\">\n<li><i>llama-index<\/i><\/li>\n<li><i>llama-parse<\/i> (for text + image parsing)<\/li>\n<li><i>llama-index-callbacks-arize-phoenix<\/i> (for observability\/logging)<\/li>\n<li><i>nest_asyncio<\/i> (to handle async event loops in notebooks)<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>!pip install -U llama-index-callbacks-arize-phoenix\n\nimport nest_asyncio\n\nnest_asyncio.apply()<\/code><\/pre>\n<h3 class=\"wp-block-heading\" id=\"h-step-2-set-up-observability\">Step 2: Set Up Observability<\/h3>\n<p>We integrate with LlamaTrace \u2013 LlamaCloud API (Arize Phoenix). First, obtain an API key from <a href=\"https:\/\/llamatrace.com\/login\" target=\"_blank\" rel=\"nofollow noopener\">llamatrace.com<\/a>, then set up environment variables to send traces to Phoenix.<\/p>\n<p>Phoenix API key can be obtained by signing up for LlamaTrace <a href=\"https:\/\/llamatrace.com\/login\" target=\"_blank\" rel=\"nofollow noopener\">here <\/a>, then navigate to the bottom left panel and click on \u2018Keys\u2019 where you should find your\u00a0 API key.<\/p>\n<p><b\/>For example:\u00a0\u00a0<\/p>\n<pre class=\"wp-block-code\"><code>PHOENIX_API_KEY = \"<phoenix_api_key>\"\nos.environ[\"OTEL_EXPORTER_OTLP_HEADERS\"] = f\"api_key={PHOENIX_API_KEY}\"\nllama_index.core.set_global_handler(\n    \"arize_phoenix\", endpoint=\"https:\/\/llamatrace.com\/v1\/traces\"\n)<\/phoenix_api_key><\/code><\/pre>\n<h3 class=\"wp-block-heading\" id=\"h-step-3-load-the-data-obtain-your-slide-deck\">Step 3: Load the data \u2013 Obtain Your Slide Deck<\/h3>\n<p>For demonstration, we use ConocoPhillips\u2019 2023 investor meeting slide deck. We download the PDF:<\/p>\n<pre class=\"wp-block-code\"><code>import os\nimport requests\n\n# Create the directories (ignore errors if they already exist)\nos.makedirs(\"data\", exist_ok=True)\nos.makedirs(\"data_images\", exist_ok=True)\n\n# URL of the PDF\nurl = \"https:\/\/static.conocophillips.com\/files\/2023-conocophillips-aim-presentation.pdf\"\n\n# Download and save to data\/conocophillips.pdf\nresponse = requests.get(url)\nwith open(\"data\/conocophillips.pdf\", \"wb\") as f:\n    f.write(response.content)\n\nprint(\"PDF downloaded to data\/conocophillips.pdf\")<\/code><\/pre>\n<p>Check if the pdf slide deck is in the data folder, if not place it in the data folder and name it as you want.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-4-set-up-models\">Step 4: Set Up Models<\/h3>\n<p>You need an embedding model and an LLM. In this example:<\/p>\n<pre class=\"wp-block-code\"><code>from llama_index.llms.openai import OpenAI\nfrom llama_index.embeddings.openai import OpenAIEmbedding\nembed_model = OpenAIEmbedding(model=\"text-embedding-3-large\")\nllm = OpenAI(model=\"gpt-4o\")<\/code><\/pre>\n<p>Next, you register these as the default for LlamaIndex:<\/p>\n<pre class=\"wp-block-code\"><code>from llama_index.core import Settings\nSettings.embed_model = embed_model\nSettings.llm = llm<\/code><\/pre>\n<h3 class=\"wp-block-heading\" id=\"h-step-5-parse-the-document-with-llamaparse\">Step 5: Parse the Document with LlamaParse<\/h3>\n<p>LlamaParse can extract text and images (via a multimodal large model). For each PDF page, it returns:<\/p>\n<ul class=\"wp-block-list\">\n<li><b>Markdown text<\/b> (with tables, headings, bullet points, etc.)<\/li>\n<li><b>A rendered image<\/b> (saved locally)<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>print(f\"Parsing slide deck...\")\nmd_json_objs = parser.get_json_result(\"data\/conocophillips.pdf\")\nmd_json_list = md_json_objs[0][\"pages\"]<\/code><\/pre>\n<figure class=\"wp-block-image size-full figure mt-2 mb-2 d-table mx-auto\"><img fetchpriority=\"high\" decoding=\"async\" width=\"917\" height=\"101\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Parse-the-Document-with-LlamaParse.webp\" alt=\"Parse the Document with LlamaParse\" class=\"wp-image-215665\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Parse-the-Document-with-LlamaParse.webp 917w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Parse-the-Document-with-LlamaParse-300x33.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Parse-the-Document-with-LlamaParse-768x85.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Parse-the-Document-with-LlamaParse-150x17.webp 150w\" sizes=\"(max-width: 917px) 100vw, 917px\"\/><\/figure>\n<pre class=\"wp-block-code\"><code>print(md_json_list[10][\"md\"])<\/code><\/pre>\n<figure class=\"wp-block-image size-full figure mt-2 mb-2 d-table mx-auto\"><img loading=\"lazy\" decoding=\"async\" width=\"1672\" height=\"412\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_gAQhz2v.webp\" alt=\"parsing\" class=\"wp-image-215670\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_gAQhz2v.webp 1672w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_gAQhz2v-300x74.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_gAQhz2v-768x189.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_gAQhz2v-1536x378.webp 1536w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_gAQhz2v-150x37.webp 150w\" sizes=\"auto, (max-width: 1672px) 100vw, 1672px\"\/><\/figure>\n<pre class=\"wp-block-code\"><code>print(md_json_list[1].keys())<\/code><\/pre>\n<figure class=\"wp-block-image size-full figure mt-2 mb-2 d-table mx-auto\"><img loading=\"lazy\" decoding=\"async\" width=\"1533\" height=\"71\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/dict-output.webp\" alt=\"dict output\" class=\"wp-image-215673\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/dict-output.webp 1533w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/dict-output-300x14.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/dict-output-768x36.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/dict-output-150x7.webp 150w\" sizes=\"auto, (max-width: 1533px) 100vw, 1533px\"\/><\/figure>\n<pre class=\"wp-block-code\"><code>image_dicts = parser.get_images(md_json_objs, download_path=\"data_images\")<\/code><\/pre>\n<figure class=\"wp-block-image size-full is-resized figure mt-2 mb-2 d-table mx-auto\"><img loading=\"lazy\" decoding=\"async\" width=\"1255\" height=\"773\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image-dict.webp\" alt=\"image dict\" class=\"wp-image-215675\" style=\"width:692px;height:auto\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image-dict.webp 1255w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image-dict-300x185.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image-dict-768x473.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image-dict-150x92.webp 150w\" sizes=\"auto, (max-width: 1255px) 100vw, 1255px\"\/><\/figure>\n<h3 class=\"wp-block-heading\" id=\"h-step-6-associate-text-and-images\">Step 6: Associate Text and Images<\/h3>\n<p>We create a list of <b><i>TextNode<\/i><\/b> objects (LlamaIndex\u2019s data structure) for each page. Each node has metadata about the page number and the corresponding image file path:<\/p>\n<pre class=\"wp-block-code\"><code>from llama_index.core.schema import TextNode\nfrom typing import Optional\n\n# get pages loaded through llamaparse\nimport re\n\n\ndef get_page_number(file_name):\n    match = re.search(r\"-page-(\\d+)\\.jpg$\", str(file_name))\n    if match:\n        return int(match.group(1))\n    return 0\n\n\ndef _get_sorted_image_files(image_dir):\n    \"\"\"Get image files sorted by page.\"\"\"\n    raw_files = [f for f in list(Path(image_dir).iterdir()) if f.is_file()]\n    sorted_files = sorted(raw_files, key=get_page_number)\n    return sorted_files\n    \nfrom copy import deepcopy\nfrom pathlib import Path\n\n\n# attach image metadata to the text nodes\ndef get_text_nodes(json_dicts, image_dir=None):\n    \"\"\"Split docs into nodes, by separator.\"\"\"\n    nodes = []\n\n    image_files = _get_sorted_image_files(image_dir) if image_dir is not None else None\n    md_texts = [d[\"md\"] for d in json_dicts]\n\n    for idx, md_text in enumerate(md_texts):\n        chunk_metadata = {\"page_num\": idx + 1}\n        if image_files is not None:\n            image_file = image_files[idx]\n            chunk_metadata[\"image_path\"] = str(image_file)\n        chunk_metadata[\"parsed_text_markdown\"] = md_text\n        node = TextNode(\n            text=\"\",\n            metadata=chunk_metadata,\n        )\n        nodes.append(node)\n\n    return nodes\n    \n# this will split into pages\ntext_nodes = get_text_nodes(md_json_list, image_dir=\"data_images\")\n\nprint(text_nodes[10].get_content(metadata_mode=\"all\"))<\/code><\/pre>\n<figure class=\"wp-block-image size-full figure mt-2 mb-2 d-table mx-auto\"><img loading=\"lazy\" decoding=\"async\" width=\"1671\" height=\"472\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Associate-Text-and-Images.webp\" alt=\"Associate Text and Images\" class=\"wp-image-215676\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Associate-Text-and-Images.webp 1671w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Associate-Text-and-Images-300x85.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Associate-Text-and-Images-768x217.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Associate-Text-and-Images-1536x434.webp 1536w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Associate-Text-and-Images-150x42.webp 150w\" sizes=\"auto, (max-width: 1671px) 100vw, 1671px\"\/><\/figure>\n<h3 class=\"wp-block-heading\" id=\"h-step-7-build-a-summary-index\">Step 7: Build a Summary Index<\/h3>\n<p>With these text nodes in hand, you can create a SummaryIndex:<\/p>\n<pre class=\"wp-block-code\"><code>import os\nfrom llama_index.core import (\n    StorageContext,\n    SummaryIndex,\n    load_index_from_storage,\n)\n\nif not os.path.exists(\"storage_nodes_summary\"):\n    index = SummaryIndex(text_nodes)\n    # save index to disk\n    index.set_index_id(\"summary_index\")\n    index.storage_context.persist(\".\/storage_nodes_summary\")\nelse:\n    # rebuild storage context\n    storage_context = StorageContext.from_defaults(persist_dir=\"storage_nodes_summary\")\n    # load index\n    index = load_index_from_storage(storage_context, index_id=\"summary_index\")<\/code><\/pre>\n<p>The SummaryIndex ensures you can easily retrieve or generate high-level summaries over the entire document.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-8-define-a-structured-output-schema\">Step 8: Define a Structured Output Schema<\/h3>\n<p>Our pipeline aims to produce a final output with interleaved text blocks and image blocks. For that, we create a custom Pydantic model (using Pydantic v2 or ensuring compatibility) with two block types\u2014<b><i>TextBlock<\/i><\/b> and <b><i>ImageBlock<\/i><\/b>\u2014and a parent model <b><i>ReportOutput<\/i><\/b>:\u00a0\u00a0<\/p>\n<pre class=\"wp-block-code\"><code>from llama_index.llms.openai import OpenAI\nfrom pydantic import BaseModel, Field\nfrom typing import List\nfrom IPython.display import display, Markdown, Image\nfrom typing import Union\n\n\nclass TextBlock(BaseModel):\n    \"\"\"Text block.\"\"\"\n\n    text: str = Field(..., description=\"The text for this block.\")\n\n\nclass ImageBlock(BaseModel):\n    \"\"\"Image block.\"\"\"\n\n    file_path: str = Field(..., description=\"File path to the image.\")\n\n\nclass ReportOutput(BaseModel):\n    \"\"\"Data model for a report.\n\n    Can contain a mix of text and image blocks. MUST contain at least one image block.\n\n    \"\"\"\n\n    blocks: List[Union[TextBlock, ImageBlock]] = Field(\n        ..., description=\"A list of text and image blocks.\"\n    )\n\n    def render(self) -&gt; None:\n        \"\"\"Render as HTML on the page.\"\"\"\n        for b in self.blocks:\n            if isinstance(b, TextBlock):\n                display(Markdown(b.text))\n            else:\n                display(Image(filename=b.file_path))\n\n\nsystem_prompt = \"\"\"\\\nYou are a report generation assistant tasked with producing a well-formatted context given parsed context.\n\nYou will be given context from one or more reports that take the form of parsed text.\n\nYou are responsible for producing a report with interleaving text and images - in the format of interleaving text and \"image\" blocks.\nSince you cannot directly produce an image, the image block takes in a file path - you should write in the file path of the image instead.\n\nHow do you know which image to generate? Each context chunk will contain metadata including an image render of the source chunk, given as a file path. \nInclude ONLY the images from the chunks that have heavy visual elements (you can get a hint of this if the parsed text contains a lot of tables).\nYou MUST include at least one image block in the output.\n\nYou MUST output your response as a tool call in order to adhere to the required output format. Do NOT give back normal text.\n\n\"\"\"\n\n\nllm = OpenAI(model=\"gpt-4o\", api_key=\"OpenAI_API_KEY\", system_prompt=system_prompt)\nsllm = llm.as_structured_llm(output_cls=ReportOutput)<\/code><\/pre>\n<p>The key point: <b><i>ReportOutput<\/i><\/b> requires at least one image block, ensuring the final answer is multimodal.<\/p>\n<h3 class=\"wp-block-heading\" id=\"h-step-9-create-a-structured-query-engine\">Step 9: Create a Structured Query Engine<\/h3>\n<p>LlamaIndex allows you to use a \u201cstructured LLM\u201d (i.e., an LLM whose output is automatically parsed into a specific schema). Here\u2019s how:\u00a0\u00a0<\/p>\n<pre class=\"wp-block-code\"><code>query_engine = index.as_query_engine(\n    similarity_top_k=10,\n    llm=sllm,\n    # response_mode=\"tree_summarize\"\n    response_mode=\"compact\",\n)\n\nresponse = query_engine.query(\n    \"Give me a summary of the financial performance of the Alaska\/International segment vs. the lower 48 segment\"\n)\n\nresponse.response.render()<\/code><\/pre>\n<figure class=\"wp-block-image size-full figure mt-2 mb-2 d-table mx-auto\"><img loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"265\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Multimodal-Output-Retrieval.webp\" alt=\"Multimodal Output Retrieval \" class=\"wp-image-215677\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Multimodal-Output-Retrieval.webp 600w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Multimodal-Output-Retrieval-300x133.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Multimodal-Output-Retrieval-150x66.webp 150w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\"\/><\/figure>\n<pre class=\"wp-block-code\"><code># Output\nThe financial performance of ConocoPhillips' Alaska\/International segment and the Lower 48 segment can be compared based on several key metrics such as capital expenditure, production, and free cash flow over the next decade.\n\nAlaska\/International Segment\nCapital Expenditure: The Alaska\/International segment is projected to have capital expenditures of $3.7 billion in 2023, averaging $4.4 billion from 2024 to 2028, and $3.0 billion from 2029 to 2032.\nProduction: Production is expected to be around 750 MBOED in 2023, increasing to an average of 870 MBOED from 2024 to 2028, and reaching 1080 MBOED from 2029 to 2032.\nFree Cash Flow (FCF): The segment is anticipated to generate $5.5 billion in FCF in 2023, with an average of $6.5 billion from 2024 to 2028, and $15.0 billion from 2029 to 2032.\nLower 48 Segment\nCapital Expenditure: The Lower 48 segment is expected to have capital expenditures of $6.3 billion in 2023, averaging $6.5 billion from 2024 to 2028, and $8.0 billion from 2029 to 2032.\nProduction: Production is projected to be approximately 1050 MBOED in 2023, increasing to an average of 1200 MBOED from 2024 to 2028, and reaching 1500 MBOED from 2029 to 2032.\nFree Cash Flow (FCF): The segment is expected to generate $7 billion in FCF in 2023, with an average of $8.5 billion from 2024 to 2028, and $13 billion from 2029 to 2032.\nOverall, the Lower 48 segment shows higher capital expenditure and production levels compared to the Alaska\/International segment, but both segments are projected to generate significant free cash flow over the next decade.<\/code><\/pre>\n<figure class=\"wp-block-image size-full is-resized figure mt-2 mb-2 d-table mx-auto\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Part-of-the-Output-Response.webp\" alt=\"Part of the Output Response for Financial Report Generation\" class=\"wp-image-215678\" style=\"width:716px;height:auto\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Part-of-the-Output-Response.webp 1600w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Part-of-the-Output-Response-300x169.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Part-of-the-Output-Response-768x432.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Part-of-the-Output-Response-1536x864.webp 1536w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Part-of-the-Output-Response-150x84.webp 150w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"\/><\/figure>\n<pre class=\"wp-block-code\"><code># Trying another query\nresponse = query_engine.query(\n    \"Give me a summary of whether you think the financial projections are stable, and if not, what are the potential risk factors. \"\n    \"Support your research with sources.\"\n)\n\nresponse.response.render()<\/code><\/pre>\n<figure class=\"wp-block-image size-full figure mt-2 mb-2 d-table mx-auto\"><img loading=\"lazy\" decoding=\"async\" width=\"1823\" height=\"702\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_V8L3rvO.webp\" alt=\"output: Financial Report Generation\" class=\"wp-image-215682\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_V8L3rvO.webp 1823w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_V8L3rvO-300x116.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_V8L3rvO-768x296.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_V8L3rvO-1536x591.webp 1536w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/image_V8L3rvO-150x58.webp 150w\" sizes=\"auto, (max-width: 1823px) 100vw, 1823px\"\/><\/figure>\n<figure class=\"wp-block-image size-full figure mt-2 mb-2 d-table mx-auto\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Retrieved-Image-Image.webp\" alt=\"Retrieved Image Image: Financial Report Generation\" class=\"wp-image-215685\" srcset=\"https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Retrieved-Image-Image.webp 1600w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Retrieved-Image-Image-300x169.webp 300w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Retrieved-Image-Image-768x432.webp 768w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Retrieved-Image-Image-1536x864.webp 1536w, https:\/\/cdn.analyticsvidhya.com\/wp-content\/uploads\/2025\/01\/Retrieved-Image-Image-150x84.webp 150w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\"\/><\/figure>\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n<p>By combining LlamaIndex, LlamaParse, and OpenAI, you can build a multimodal report generator that processes an entire PDF (with text, tables, and images) into a structured output. This approach delivers richer, more visually informative results\u2014exactly what stakeholders need to glean critical insights from complex corporate or technical documents.<\/p>\n<p>Feel free to adapt this pipeline to your own documents, add a retrieval step for large archives, or integrate domain-specific models for analyzing the underlying images. With the foundations laid out here, you can create dynamic, interactive, and visually rich reports that go far beyond simple text-based queries.<\/p>\n<p>A big thanks to Jerry Liu from LlamaIndex for developing this amazing pipeline.<\/p>\n<h4 class=\"wp-block-heading\" id=\"h-key-takeaways\">Key Takeaways <\/h4>\n<ul class=\"wp-block-list\">\n<li>Transform PDFs with text and visuals into structured formats while preserving the integrity of original content using LlamaParse and LlamaIndex.<\/li>\n<li>Generate visually enriched reports that interweave textual summaries and images for better contextual understanding.<\/li>\n<li>Financial report generation can be enhanced by integrating both text and visual elements for more insightful and dynamic outputs.<\/li>\n<li>Leveraging LlamaIndex and LlamaParse streamlines the process of financial report generation, ensuring accurate and structured results.<\/li>\n<li>Retrieve relevant documents before processing to optimize report generation for large archives.<\/li>\n<li>Improve visual parsing, incorporate chart-specific analytics, and combine models for text and image processing for deeper insights.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\" id=\"h-frequently-asked-questions\">Frequently Asked Questions<\/h2>\n<div class=\"schema-faq wp-block-yoast-faq-block\">\n<div class=\"schema-faq-section\" id=\"faq-question-1736929232690\"><strong class=\"schema-faq-question\">Q1. What is a \u201cmultimodal report generator\u201d?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. A multimodal report generator is a system that produces reports containing multiple types of content\u2014primarily text and images\u2014in one cohesive output. In this pipeline, you parse a PDF into both textual and visual elements, then combine them into a single final report.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1736929256135\"><strong class=\"schema-faq-question\">Q2. Why do I need to install llama-index-callbacks-arize-phoenix and set up observability?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. Observability tools like Arize Phoenix (via LlamaTrace) let you monitor and debug model behavior, track queries and responses, and identify issues in real time. It\u2019s especially useful when dealing with large or complex documents and multiple LLM-based steps.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1736929279483\"><strong class=\"schema-faq-question\">Q3. Why use LlamaParse instead of a standard PDF text extractor?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A.  Most PDF text extractors only handle raw text, often losing formatting, images, and tables. LlamaParse is capable of extracting both text and images (rendered page images), which is crucial for building multimodal pipelines where you need to refer back to tables, charts, or other visuals.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1736929298364\"><strong class=\"schema-faq-question\">Q4. What is the advantage of using a SummaryIndex?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. SummaryIndex is a LlamaIndex abstraction that organizes your content (e.g., pages of a PDF) so it can quickly generate comprehensive summaries. It helps gather high-level insights from long documents without having to chunk them manually or run a retrieval query for each piece of data.<\/p>\n<\/p><\/div>\n<div class=\"schema-faq-section\" id=\"faq-question-1736929371965\"><strong class=\"schema-faq-question\">Q5. How do I ensure the final report includes at least one image block?<\/strong> <\/p>\n<p class=\"schema-faq-answer\">A. In the ReportOutput Pydantic model, enforce that the blocks list requires at least one ImageBlock. This is stated in your system prompt and schema. The LLM must follow these rules, or it will not produce valid structured output.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<p><strong>The media shown in this article is not owned by Analytics Vidhya and is used at the Author\u2019s discretion.<\/strong><\/p>\n<div class=\"border-top py-3 author-info my-4\">\n<div class=\"author-card d-flex align-items-center\">\n<div class=\"flex-shrink-0 overflow-hidden\">\n                                    <a href=\"https:\/\/www.analyticsvidhya.com\/blog\/author\/adarsh2039075\/\" class=\"text-decoration-none active-avatar\"><br \/>\n                                                                       <img decoding=\"async\" src=\"https:\/\/av-eks-lekhak.s3.amazonaws.com\/media\/lekhak-profile-images\/converted_image_tHXFGNS.webp\" width=\"48\" height=\"48\" alt=\"Adarsh Balan\" loading=\"lazy\" class=\"rounded-circle\"\/><\/p>\n<p>                                <\/a>\n                                <\/div>\n<\/p><\/div>\n<p>    Hi! I&#8217;m Adarsh, a Business Analytics graduate from ISB, currently deep into research and exploring new frontiers. I&#8217;m super passionate about data science, AI, and all the innovative ways they can transform industries. Whether it&#8217;s building models, working on data pipelines, or diving into machine learning, I love experimenting with the latest tech. AI isn&#8217;t just my interest, it&#8217;s where I see the future heading, and I&#8217;m always excited to be a part of that journey!    <\/p>\n<\/p><\/div>\n<\/p><\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>In many real-world applications, data is not purely textual\u2014it may include images, tables, and charts that help reinforce the narrative. A multimodal report generator allows you to incorporate both text and images into a final output, making your reports more dynamic and visually rich. This article outlines how to build such a pipeline using: LlamaIndex [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":30131,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12033],"tags":[5815,10912,2266,20384,20383,10930],"dealstore":[],"offerexpiration":[],"class_list":["post-30130","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-blogathon","tag-financial","tag-generation","tag-llamaindex","tag-multimodal","tag-report"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Multimodal Financial Report Generation using Llamaindex - Som2ny Network<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fivemor.com\/?p=30130\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Multimodal Financial Report Generation using Llamaindex - Som2ny Network\" \/>\n<meta property=\"og:description\" content=\"In many real-world applications, data is not purely textual\u2014it may include images, tables, and charts that help reinforce the narrative. A multimodal report generator allows you to incorporate both text and images into a final output, making your reports more dynamic and visually rich. This article outlines how to build such a pipeline using: LlamaIndex [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fivemor.com\/?p=30130\" \/>\n<meta property=\"og:site_name\" content=\"Som2ny Network\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-16T02:36:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/01\/Multimodal-Financial-Report-Generation-from-a-Slide-Deck-using-Llamaindex.webp.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"872\" \/>\n\t<meta property=\"og:image:height\" content=\"473\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fivemor.com\/?p=30130#article\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/?p=30130\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\"},\"headline\":\"Multimodal Financial Report Generation using Llamaindex\",\"datePublished\":\"2025-01-16T02:36:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=30130\"},\"wordCount\":1343,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=30130#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/01\/Multimodal-Financial-Report-Generation-from-a-Slide-Deck-using-Llamaindex.webp.webp\",\"keywords\":[\"Blogathon\",\"Financial\",\"Generation\",\"Llamaindex\",\"Multimodal\",\"Report\"],\"articleSection\":[\"Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fivemor.com\/?p=30130#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fivemor.com\/?p=30130\",\"url\":\"https:\/\/fivemor.com\/?p=30130\",\"name\":\"Multimodal Financial Report Generation using Llamaindex - Som2ny Network\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=30130#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=30130#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/01\/Multimodal-Financial-Report-Generation-from-a-Slide-Deck-using-Llamaindex.webp.webp\",\"datePublished\":\"2025-01-16T02:36:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fivemor.com\/?p=30130#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fivemor.com\/?p=30130\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/?p=30130#primaryimage\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/01\/Multimodal-Financial-Report-Generation-from-a-Slide-Deck-using-Llamaindex.webp.webp\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/01\/Multimodal-Financial-Report-Generation-from-a-Slide-Deck-using-Llamaindex.webp.webp\",\"width\":872,\"height\":473},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fivemor.com\/?p=30130#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fivemor.com\/?bp_activities=1\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Multimodal Financial Report Generation using Llamaindex\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fivemor.com\/#website\",\"url\":\"https:\/\/fivemor.com\/\",\"name\":\"Som2ny Network\",\"description\":\"Daily Deals\",\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fivemor.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fivemor.com\/#organization\",\"name\":\"Som2ny Network\",\"url\":\"https:\/\/fivemor.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"width\":300,\"height\":86,\"caption\":\"Som2ny Network\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/fivemor.com\"],\"url\":\"https:\/\/fivemor.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Multimodal Financial Report Generation using Llamaindex - Som2ny Network","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fivemor.com\/?p=30130","og_locale":"en_US","og_type":"article","og_title":"Multimodal Financial Report Generation using Llamaindex - Som2ny Network","og_description":"In many real-world applications, data is not purely textual\u2014it may include images, tables, and charts that help reinforce the narrative. A multimodal report generator allows you to incorporate both text and images into a final output, making your reports more dynamic and visually rich. This article outlines how to build such a pipeline using: LlamaIndex [&hellip;]","og_url":"https:\/\/fivemor.com\/?p=30130","og_site_name":"Som2ny Network","article_published_time":"2025-01-16T02:36:40+00:00","og_image":[{"width":872,"height":473,"url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/01\/Multimodal-Financial-Report-Generation-from-a-Slide-Deck-using-Llamaindex.webp.webp","type":"image\/webp"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fivemor.com\/?p=30130#article","isPartOf":{"@id":"https:\/\/fivemor.com\/?p=30130"},"author":{"name":"admin","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371"},"headline":"Multimodal Financial Report Generation using Llamaindex","datePublished":"2025-01-16T02:36:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fivemor.com\/?p=30130"},"wordCount":1343,"commentCount":0,"publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"image":{"@id":"https:\/\/fivemor.com\/?p=30130#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/01\/Multimodal-Financial-Report-Generation-from-a-Slide-Deck-using-Llamaindex.webp.webp","keywords":["Blogathon","Financial","Generation","Llamaindex","Multimodal","Report"],"articleSection":["Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fivemor.com\/?p=30130#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fivemor.com\/?p=30130","url":"https:\/\/fivemor.com\/?p=30130","name":"Multimodal Financial Report Generation using Llamaindex - Som2ny Network","isPartOf":{"@id":"https:\/\/fivemor.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fivemor.com\/?p=30130#primaryimage"},"image":{"@id":"https:\/\/fivemor.com\/?p=30130#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/01\/Multimodal-Financial-Report-Generation-from-a-Slide-Deck-using-Llamaindex.webp.webp","datePublished":"2025-01-16T02:36:40+00:00","breadcrumb":{"@id":"https:\/\/fivemor.com\/?p=30130#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fivemor.com\/?p=30130"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/?p=30130#primaryimage","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/01\/Multimodal-Financial-Report-Generation-from-a-Slide-Deck-using-Llamaindex.webp.webp","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/01\/Multimodal-Financial-Report-Generation-from-a-Slide-Deck-using-Llamaindex.webp.webp","width":872,"height":473},{"@type":"BreadcrumbList","@id":"https:\/\/fivemor.com\/?p=30130#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fivemor.com\/?bp_activities=1"},{"@type":"ListItem","position":2,"name":"Multimodal Financial Report Generation using Llamaindex"}]},{"@type":"WebSite","@id":"https:\/\/fivemor.com\/#website","url":"https:\/\/fivemor.com\/","name":"Som2ny Network","description":"Daily Deals","publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fivemor.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fivemor.com\/#organization","name":"Som2ny Network","url":"https:\/\/fivemor.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","width":300,"height":86,"caption":"Som2ny Network"},"image":{"@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","caption":"admin"},"sameAs":["https:\/\/fivemor.com"],"url":"https:\/\/fivemor.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/30130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=30130"}],"version-history":[{"count":0,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/30130\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/media\/30131"}],"wp:attachment":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=30130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=30130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=30130"},{"taxonomy":"dealstore","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fdealstore&post=30130"},{"taxonomy":"offerexpiration","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fofferexpiration&post=30130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}