<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<?xml-stylesheet href="/static/styles/feed.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
   <title>anshul paruchuri</title>
   <link>https://anshulparuchuri.com/</link>
   <description>Recent content on anshul paruchuri</description>
   <language>en-IN</language>
   <webMaster>Anshul Paruchuri</webMaster>
   <copyright>anshul paruchuri</copyright>
   <lastBuildDate>Sat, 30 May 2026 13:20:11 +0000</lastBuildDate>
   <atom:link href="https://anshulparuchuri.com/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>ACM Sigmod 2026 Pre-Workshop Talks</title>
      <link>https://anshulparuchuri.com/til/acm-sigmod.html/</link>
      <pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate>
      <author>Anshul Paruchuri</author>
      <guid>https://anshulparuchuri.com/til/acm-sigmod.html</guid>
      <description>&lt;h1 id=&#34;test-automation-for-low-code-etl-workflows&#34;&gt;Test Automation for Low-Code ETL Workflows&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Speaker: Meenakshi D&#39;Souza (IIT Madras)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;ETL is a data integration process that combines data from various sources according to the desired requirements, and then loads it into a target (typically a data warehouse).&#xA;No-code/low-code ETL platforms provide features for business users to develop ETL pipelines without writing much code.&#xA;Low-code open source ETL tools: Apache Airflow, Apache Ni-Fi, CDAP.&lt;/p&gt;&#xA;&lt;h2 id=&#34;objective&#34;&gt;Objective&lt;/h2&gt;&#xA;&lt;p&gt;Can we design a set of functional testing plugins for ETL workflows, mainly for data pipelines using ETL tools?&lt;/p&gt;&#xA;&lt;h2 id=&#34;structure-of-the-etl-process&#34;&gt;Structure of the ETL Process&lt;/h2&gt;&#xA;&lt;p&gt;Data from multiple sources are transformed using a well defined set of syntactic rules that are applied step by step, and loaded into a sink.&#xA;Typically, this is represented as a DAG. Each node in the DAG is a transformation step, and edges connect one transformation step into another.&lt;/p&gt;&#xA;&lt;h2 id=&#34;proposed-framework-easytest-etl&#34;&gt;Proposed Framework (EasyTest ETL)&lt;/h2&gt;&#xA;&lt;p&gt;Consists of 3 plugins: Assertion, Fixture and Mutation.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Assertion: Evaluates a validation rule. Uses Java EXL library to specify rule expressions.&lt;/li&gt;&#xA;&lt;li&gt;Fixture: This transform implements a singleton class.&lt;/li&gt;&#xA;&lt;li&gt;Mutation:&#xA;This project presents a general framework for plugins to facilitate functional testing of low-code ETL workflows.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;fueling-enterprise-ai-through-robust-data-ingestion&#34;&gt;Fueling Enterprise AI through Robust Data Ingestion&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Speaker: Prasad M Deshpande (Databricks)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;introduction-1&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Typical enterprise data is spread over multiple sources. The first step is to get all this data into a single platform. 3 steps in the process:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Ingest&lt;/li&gt;&#xA;&lt;li&gt;Transform&lt;/li&gt;&#xA;&lt;li&gt;Orchestrate (Make it run regularly and reliably while balancing cost and latency)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;why-is-ingestion-hard&#34;&gt;Why is Ingestion Hard?&lt;/h2&gt;&#xA;&lt;p&gt;There are hundreds of source types, each with different APIs, protocols and quirks. Enterprises also have these requirements:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Scalability&lt;/li&gt;&#xA;&lt;li&gt;Efficiency and cost&lt;/li&gt;&#xA;&lt;li&gt;Handle updates and deletes&lt;/li&gt;&#xA;&lt;li&gt;Low latency&lt;/li&gt;&#xA;&lt;li&gt;Failure recovery&lt;/li&gt;&#xA;&lt;li&gt;Governance&#xA;Ingestion has two phases: Snapshot (initial copy) and Incremental (keeping the data fresh).&#xA;Sources can be of 2 types: SaaS Systems and Database Systems&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Another challenge is rate limits while using APIs for SaaS sources: Use smart backoff strategies.&lt;/p&gt;&#xA;&lt;h2 id=&#34;overall-flow&#34;&gt;Overall Flow&lt;/h2&gt;&#xA;&lt;p&gt;Source &amp;gt; Reader &amp;gt; Buffer &amp;gt; Merger &amp;gt; Destination&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Reader: Extract data from source&lt;/li&gt;&#xA;&lt;li&gt;Buffer: Design choice. It decouples reading from merging, and enables independent scaling&lt;/li&gt;&#xA;&lt;li&gt;Merger: Merges multiple data sources.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Incremental vs Batch Ingestion&lt;/p&gt;&#xA;&lt;h2 id=&#34;cursor&#34;&gt;Cursor&lt;/h2&gt;&#xA;&lt;p&gt;Challenge: How do we fetch only new data?  This can be done using the Cursor logic.&#xA;Steps:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Find a col that changes whenever a record is updated&lt;/li&gt;&#xA;&lt;li&gt;Keep track of maximum value seen so far.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The ideal cursor field changes whenever the record is updated, always increases and is strictly ordered by update time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;chunking-large-datasets&#34;&gt;Chunking Large Datasets&lt;/h2&gt;&#xA;&lt;h3 id=&#34;naive-approach&#34;&gt;Naive Approach&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Chunking using offset + limit&lt;/li&gt;&#xA;&lt;li&gt;Go to an offset and then fetch n records.&lt;/li&gt;&#xA;&lt;li&gt;Problem: Sort order is unstable when cursor fields change. Standard offsets miss records during updates.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;robust-chunking&#34;&gt;Robust Chunking&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Do not rely on offset. Use last updated cursor value.&lt;/li&gt;&#xA;&lt;li&gt;This works, but it cannot handle bulk updates.&lt;/li&gt;&#xA;&lt;li&gt;LIMIT cuts in the middle of a group.&lt;/li&gt;&#xA;&lt;li&gt;Can use &lt;code&gt;&amp;gt;=&lt;/code&gt; but it causes duplicates.&lt;/li&gt;&#xA;&lt;li&gt;Cursor does not progress if the whole chunk has the same value.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;keyset-pagination-solution&#34;&gt;Keyset Pagination Solution&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Idea: Sort on cursor + primary key.&lt;/li&gt;&#xA;&lt;li&gt;Use composite as chunking mechanism&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;unstructured-data-for-ai&#34;&gt;Unstructured Data for AI&lt;/h2&gt;&#xA;&lt;p&gt;Challenges:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Parsing complexity&lt;/li&gt;&#xA;&lt;li&gt;Content representation&lt;/li&gt;&#xA;&lt;li&gt;Incremental syncing&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;acls-and-permission-problem&#34;&gt;ACLs and Permission Problem&lt;/h2&gt;&#xA;&lt;h3 id=&#34;approach-1-data-storage&#34;&gt;Approach 1: Data Storage&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Store ACLs as data&lt;/li&gt;&#xA;&lt;li&gt;Easy implementation&lt;/li&gt;&#xA;&lt;li&gt;Reies on trusting application layer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;approach-2-platform-security&#34;&gt;Approach 2: Platform Security&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Map to destination row-level security.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;database-sources&#34;&gt;Database Sources&lt;/h2&gt;&#xA;&lt;p&gt;These sources have CDCs that can read the transaction log. The two phases here are CDC (read change stream) and Snapshot (capture current state by querying tables).&#xA;CDC needs to start before snapshot.&#xA;CDC records have a sequence number; The correct sequence number S should be the LSN at CDC start.&lt;/p&gt;&#xA;&lt;h2 id=&#34;snapshot-split-problem&#34;&gt;Snapshot Split Problem&lt;/h2&gt;&#xA;&lt;p&gt;A 1TB table at 100MB/s requires nearly 3 hours for a full scan. In such a situation, the solution is to read in parallel, checkpoint individually, and retry independently if issues occur. Splits should ideally be even.&#xA;Use composite key partitioning for even splits.&lt;/p&gt;&#xA;&lt;h2 id=&#34;challenges&#34;&gt;Challenges&lt;/h2&gt;&#xA;&lt;h3 id=&#34;merging&#34;&gt;Merging&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Duplicates&lt;/li&gt;&#xA;&lt;li&gt;Out of Order&lt;/li&gt;&#xA;&lt;li&gt;Partial Records&#xA;Merger must reconcile these technical hurdles to ensure data integrity.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;postgresql-architecture&#34;&gt;PostgreSQL Architecture&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Speaker: Pavan Deolasse (EDB)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;&#xA;&lt;p&gt;Postgres uses processes, not threads. Helps with portability, debugging and fault isolation, but leads to high process overhead.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Postmaster: Supervisor, listens for incoming connections and forks per-connection backends.&lt;/li&gt;&#xA;&lt;li&gt;Per-Connection Backend: Isolated env. Entire query lifecycle runs in a single dedicated OS process.&lt;/li&gt;&#xA;&lt;li&gt;Background Workers: System maintenance.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;query-processing&#34;&gt;Query Processing&lt;/h2&gt;&#xA;&lt;p&gt;Parser &amp;gt; Analyzer &amp;gt; Rewriter &amp;gt; Planner &amp;gt; Executor&#xA;Planner/optimizer is the most active contribution area in core Postgres.&lt;/p&gt;&#xA;&lt;h2 id=&#34;storage&#34;&gt;Storage&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Heap Tables: Primary storage area. Default page size is 8kB, and is segmented at 1GB files on disk.&lt;/li&gt;&#xA;&lt;li&gt;Indexes: Similar structures to heap tables, but diff page format optimized for search.&lt;/li&gt;&#xA;&lt;li&gt;TOAST: Large values are transparently compressed or moved to side tables.&lt;/li&gt;&#xA;&lt;li&gt;Free Space/Visibility Maps: Per-page bitmaps that guide insert and vacuum ops for efficiency.&lt;/li&gt;&#xA;&lt;li&gt;Tablespaces: Allows pointing tables and indexes at diff filesystems for storage tiering.&lt;/li&gt;&#xA;&lt;li&gt;TAM: Pluggable columnar architecture.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;mvcc&#34;&gt;MVCC&lt;/h2&gt;&#xA;&lt;p&gt;Multiversion Concurrency Control. The mechanism is that tuples are never updated in-place. Always create a new version of the row that sits next to the old version of the row.&#xA;This ensures readers and writers do not block each other. It gives accurate snapshot isolation, and rollbacks are easy.&lt;/p&gt;&#xA;&lt;h2 id=&#34;wal&#34;&gt;WAL&lt;/h2&gt;&#xA;&lt;p&gt;WAL is used for durability and replication. Changes are logged before hitting the disk.&#xA;Replication is both physical and logical in postgres.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pluggable-indexes&#34;&gt;Pluggable Indexes&lt;/h2&gt;&#xA;&lt;h3 id=&#34;built-in-index-types&#34;&gt;Built-in Index Types&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;B-tree&lt;/li&gt;&#xA;&lt;li&gt;Hash&lt;/li&gt;&#xA;&lt;li&gt;GiST and SP-GiST&lt;/li&gt;&#xA;&lt;li&gt;GIN&lt;/li&gt;&#xA;&lt;li&gt;BRIN&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;plugins&#34;&gt;Plugins&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;pgvector for AI embeddings&lt;/li&gt;&#xA;&lt;li&gt;pg_trgm for trigram via GIN.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;extensibility&#34;&gt;Extensibility&lt;/h2&gt;&#xA;&lt;p&gt;Extensibility is a design principle in Postgres. It is built to be extended without forking.&#xA;The primary mode of contributions is through the pgsql-hackers mailing list.&lt;/p&gt;&#xA;&lt;h1 id=&#34;rethinking-relational-dbs-in-the-age-of-genai&#34;&gt;Rethinking Relational DBs in the Age of GenAI&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Speaker: Carsten Binnig (TU Darmstadt)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1 id=&#34;introduction-2&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Almost every critical system depends on Relational DBs, and cloud helps it become more scalable. However, there is a high overhead to pay, to use these DBs. Not much changed even when everything moved to cloud.&lt;/p&gt;&#xA;&lt;p&gt;Original Promises:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Easy to use data model and queries&lt;/li&gt;&#xA;&lt;li&gt;DB optimizes the execution for you.&#xA;However, data tends to be unstructured, and does not come in tables.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Relational tax: Overheads are rooted in the design of the relational model.&lt;/p&gt;&#xA;&lt;p&gt;Query tax: Query authoring is complex.&#xA;Tuning tax: DBs require massive tuning.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cutting-these-relational-taxes-with-ai&#34;&gt;Cutting these Relational Taxes with AI&lt;/h2&gt;&#xA;&lt;h3 id=&#34;query-and-data-tax&#34;&gt;Query and Data Tax&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Natural language queries easier for user, but can be hard to interpret.&lt;/li&gt;&#xA;&lt;li&gt;A more efficient query type for the DB is sloppy SQL: a mix of natural language and SQL. This is an approach a lot of companies are considering.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;major-issues-of-using-llms-as-dbs&#34;&gt;Major Issues of using LLMs as DBs&lt;/h4&gt;&#xA;&lt;p&gt;A pure LLM/RAG-style approach for natural language queries leads to some issues.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Limited to simple NL queries&lt;/li&gt;&#xA;&lt;li&gt;Limited data understanding if data is already structured.&lt;/li&gt;&#xA;&lt;li&gt;Enterprise data is stored in structured form&lt;/li&gt;&#xA;&lt;li&gt;Black-box processing&lt;/li&gt;&#xA;&lt;li&gt;High cost.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;a-solution&#34;&gt;A Solution&lt;/h4&gt;&#xA;&lt;p&gt;LLM-Augmented DBs: Extend DBs with LLMs as needed. LLMs and DBs can be used to complement each other.&lt;br&gt;&#xA;Relational + LLM-based operators. Use LLM-driven Multimodal filters.&#xA;LLM can be used for query planning.&#xA;Carsten&#39;s project is called Caesura.&#xA;Working: Take NL query and logical operators, and ask the LLM to create a logical plan to possibly execute the query. This logical plan is then converted into a physical plan (actual execution strategy with the tech stack being used). LLM is used to reason over data and logical operations.&lt;/p&gt;&#xA;&lt;h2 id=&#34;text-to-sql-in-enterprise-data&#34;&gt;Text to SQL in Enterprise Data&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Benchmarks: Spider and BIRD.&lt;/li&gt;&#xA;&lt;li&gt;SeRA: Semantic Restauration Agent. Uses ReACT + Reasoning over semantic meaning of schema elements.&lt;/li&gt;&#xA;&lt;li&gt;Bespoke DBs: A DBMS tailored for one specific workload.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>GOSS and LightGBM</title>
      <link>https://anshulparuchuri.com/til/goss-and-lightgbm.html/</link>
      <pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate>
      <author>Anshul Paruchuri</author>
      <guid>https://anshulparuchuri.com/til/goss-and-lightgbm.html</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;LightGBM is a FOSS gradient boosting framework for ML developed by Microsoft. It uses the Gradient-Based One-Side Sampling (GOSS) mechanism.&lt;/p&gt;&#xA;&lt;h1 id=&#34;goss&#34;&gt;GOSS&lt;/h1&gt;&#xA;&lt;p&gt;GOSS is an sampling method that first, sorts the training data by the gradients of the loss function with respect to the current model, and then selects a subset of the data based on the magnitude of these gradients.&#xA;In regular Gradient Boosting, a model is trained by iteratively adding weak learners to the model, with each new learner being trained on the residual errors of the previous learners. This process continues until the model reaches a pre-defined stopping criteria.&#xA;On the other hand, GOSS selects a subset of training data based on the gradients of the loss fn, with respect to the current model. It has 2 steps:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;For each data instance, the algorithm computes its gradient, and adds it to a sorted list. This is then divided into 2 parts: The top k gradients, and the bottom n-k gradients.&lt;/li&gt;&#xA;&lt;li&gt;For the large gradients, the algorithm includes all of the corresponding data instances in the subset of the data instances to consider for the split points. For the small gradients, the algorithm randomly samples a fixed number of data instances to include in the subset. The number of data instances to sample are determined by a bagging function.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;The idea is to sample instances to account for the gradient of the loss fn with respect to the predictions made by the model.&lt;/p&gt;&#xA;&lt;h1 id=&#34;why-lightgbm&#34;&gt;Why LightGBM?&lt;/h1&gt;&#xA;&lt;p&gt;While most boosting libraries grow trees level-by-level, LightGBM grows it leaf-wise. It splits the single leaf that will reduce the most. This produces deeper, more asymmetric trees with fewer splits.&lt;/p&gt;&#xA;&lt;p&gt;In sparse data, many features are rarely non-zero at the same time. LightGBM bundles such mutually exclusive features into a single feature, reduncing dimensionality without losing information.&lt;/p&gt;&#xA;&lt;p&gt;GOSS allows it to sort all samples by their gradient, randomly sample the small gradients, and upweight the small gradient examples to correct for the sampling bias. This helps prevent overfitting.&lt;/p&gt;&#xA;&lt;p&gt;LightGBM is particularly useful in ML hackathons as it trains much faster than XGBoost/Random Forest, does not require feature scaling/normalization, and can handle missing values natively.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Context Graphs</title>
      <link>https://anshulparuchuri.com/til/context-graphs.html/</link>
      <pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate>
      <author>Anshul Paruchuri</author>
      <guid>https://anshulparuchuri.com/til/context-graphs.html</guid>
      <description>&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can current systems survive the shift to agents?&lt;/li&gt;&#xA;&lt;li&gt;Agents become the interface (instead of record systems such as Salesforce, Workday, etc.)&lt;/li&gt;&#xA;&lt;li&gt;Decision Traces: Missing layer that actually runs enterprises. They capture what happens in specific cases.&lt;/li&gt;&#xA;&lt;li&gt;Rules: Tell an agent what should happen in general.&lt;/li&gt;&#xA;&lt;li&gt;Agents do not just need rules. They need access to decision traces to show how rules were applied in the past, and how conflicts are resolved.&lt;/li&gt;&#xA;&lt;li&gt;Agent systems sit in the execution path. They see the full context at decision time. If these traces are persisted, we get a queryable record of how decisions were made. This currently does not exist.&lt;/li&gt;&#xA;&lt;li&gt;This accumulated structure formed by these traces is called a context graph. It is a living record of decision traces stitched across entitites, and time, so the precedent becomes searchable.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;what-current-systems-do-not-capture&#34;&gt;What Current Systems do not Capture&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Agents ship into real workflows. Decision traces are missing.&lt;/li&gt;&#xA;&lt;li&gt;We can store the following as durable artifacts:&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Exception logic that lives in people&#39;s heads&lt;/li&gt;&#xA;&lt;li&gt;Precedent from past decisions&lt;/li&gt;&#xA;&lt;li&gt;Cross-system synthesis&lt;/li&gt;&#xA;&lt;li&gt;Approval chains&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;When startups instrument the agent orchestration layer to emit a decision trace on every tun, they get something that enterprises almost never have today, which is a replayable history of turning context into action.&lt;/li&gt;&#xA;&lt;li&gt;Over time, records should naturally form a context graph.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;why-it-is-not-currently-possible&#34;&gt;Why it is not Currently Possible&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Operational incumbents are siloed, and they prioritize their current state. Even if these systems introduce agents, they do not preserve the context that justified the decision.&lt;/li&gt;&#xA;&lt;li&gt;You cannot replay the state of the world at decision time.&lt;/li&gt;&#xA;&lt;li&gt;A system of agents has an advantage that the agents are in the orchestration path. When an agent triages an escalation, responds to an incident or decides a discount, it pulls context from multiple systems and acts.&lt;/li&gt;&#xA;&lt;li&gt;The orchestration layer sees the full picture, because it executes the workflow.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>blogs</title>
      <link>https://anshulparuchuri.com/blogs.html/</link>
      <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
      <author>Anshul Paruchuri</author>
      <guid>https://anshulparuchuri.com/blogs.html</guid>
      <description>&lt;p&gt;coming soon.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>MedGraphRAG</title>
      <link>https://anshulparuchuri.com/til/medgraphrag.html/</link>
      <pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate>
      <author>Anshul Paruchuri</author>
      <guid>https://anshulparuchuri.com/til/medgraphrag.html</guid>
      <description>&lt;h1 id=&#34;summary&#34;&gt;Summary&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MedGraphRAG is an innovative framework designed to improve the accuracy and safety of LLMs in the medical field.&lt;/li&gt;&#xA;&lt;li&gt;Uses a 3-tier hierarchical graph that links private user data to established medical textbooks and foundation dictionaries.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;key-points&#34;&gt;Key Points&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The 3-tier layer is as follows:&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Top level (User-Provided)&lt;/li&gt;&#xA;&lt;li&gt;Medium level (Medical Papers and Books)&lt;/li&gt;&#xA;&lt;li&gt;Bottom level (Fundamental Medical Dictionary)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;The paper proposes a U-retrieve strategy to combine top-down retrieval with bottom-up response generation to answer user queries. This is designed to not allow the LLM to generate too much information and depend on the facts.&lt;/li&gt;&#xA;&lt;li&gt;Meta-Graphs: These are weighted nodes used to construct the system&#39;s comprehensive global knowledge graph.&lt;/li&gt;&#xA;&lt;li&gt;The pre-defined medical categories used for tag generation are symptoms, patient history, body functions and medications.&lt;/li&gt;&#xA;&lt;li&gt;The paper suggests a hybrid static-semantic method to divide larger medical documents into manageable data chunks. It uses a technique called Proposition Transfer to the text, which transforms the raw paragraphs into standalone, self-sustaining statements. This is then fed to an LLM that uses a zero-shot approach to decide whether a statement belongs to a existing data chunk or if it requires initiating a new chunk.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;notes&#34;&gt;Notes&lt;/h1&gt;&#xA;&lt;h2 id=&#34;3-tier-graph&#34;&gt;3-Tier Graph&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Top Level:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Consists of specific, confidential user data.&lt;/li&gt;&#xA;&lt;li&gt;User-specific and experiences the highest frequency of updates and changes.&lt;/li&gt;&#xA;&lt;li&gt;The paper uses MIMIC-IV for this.&lt;/li&gt;&#xA;&lt;li&gt;Entities are extracted from documents and then linked to stuff in the second tier based on relevance.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Medium Level:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Built from up-to-date, peer-reviewed medical textbooks and articles.&lt;/li&gt;&#xA;&lt;li&gt;Acts as a bridge.&lt;/li&gt;&#xA;&lt;li&gt;Updated at a medium frequency, typically at an annual basis.&lt;/li&gt;&#xA;&lt;li&gt;MedC-K dataset used by the paper.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Bottom Level:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Provides detailed explanation of medical terms and their semantic relationships.&lt;/li&gt;&#xA;&lt;li&gt;Most fundamental and authoritative data tier.&lt;/li&gt;&#xA;&lt;li&gt;UMLS dataset used for this layer.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;u-retrieve-strategy&#34;&gt;U-Retrieve Strategy&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Top-Down Retrieval:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Structure the user&#39;s query using predefined medical tags.&lt;/li&gt;&#xA;&lt;li&gt;Using these summarized tag descriptions, the system performs a top-down matching process, starting from the largest, highest-level global graphs, and progressively indexes down into the smaller, more specific graphs.&lt;/li&gt;&#xA;&lt;li&gt;This downward matching is repeated until the system reaches the foundational layer where it activates multiple relevant medical entities.&lt;/li&gt;&#xA;&lt;li&gt;All the pertinent information related to these activated medical entities is gathered. This includes the content of the entities, their top-k related entities, their relationships and any associated foundational medical knowledge.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Bottom-Up Response Generation:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Once the content is retrieved, the LLM is prompted to generate an initial, intermediate text response.&lt;/li&gt;&#xA;&lt;li&gt;This is then carried upwards and combined with the summarized tag information of the next higher-level graph.&lt;/li&gt;&#xA;&lt;li&gt;This is repeated until the highest level of the graph structure is reached.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;meta-graphs&#34;&gt;Meta-Graphs&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;After user documents are segmented into chunks, and entities are extracted and linked, the system creates a meta-graph for each individual data chunk.&lt;/li&gt;&#xA;&lt;li&gt;The system prompts an LLM to identify relationships between the extracted entities based on their names, descriptions, definitions and associated lower-level medical knowledge.&lt;/li&gt;&#xA;&lt;li&gt;The LLM establishes these relationships by identifying the source and target entities, and then assigning a closeness score. This resulting weighted graph is what is referred to as a meta-graph.&lt;/li&gt;&#xA;&lt;li&gt;These individual meta-graphs are then merged iteratively using the generated tags, and similarity calculation.&lt;/li&gt;&#xA;&lt;li&gt;This bottom-up merging process repeats until a single global graph remains.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;expanding-medgraphrag&#34;&gt;Expanding MedGraphRAG&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Temporal Knowledge Graphs&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Real-time physiological data streams&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Standardized clinical risk-scoring systems.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The base idea is to augment the 3-tier structure of MedGraphRAG with time-stamped edges and agentic reasoning loops.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The static meta-graphs in MedGraphRAG can be evolved into [[Temporal KGs]] that can model a patient&#39;s health trajecteroy as a sequence of state-dependent snapshots.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In our expansion, we can have a patient-centred graph that is defined by specific temporal and causal relationships.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>anshul paruchuri</title>
      <link>https://anshulparuchuri.com/index.html/</link>
      <pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
      <author>Anshul Paruchuri</author>
      <guid>https://anshulparuchuri.com/index.html</guid>
      <description>&lt;figure&gt;&#xA;&lt;img src=&#34;/static/images/main.jpg&#34; alt=&#34;&#34;&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;&lt;em&gt;bengaluru evenings&lt;/em&gt;&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;i&#39;m anshul. third-year cse student at pes university, bengaluru. interested in ai and data. other than that, i like football and photography.  &lt;br&gt;&#xA;previous sde intern @ &lt;a href=&#34;https://in.linkedin.com/company/karplexus&#34;&gt;karplexus&lt;/a&gt;; ex-core @ &lt;a href=&#34;https://hsp-ec.xyz/&#34;&gt;hsp&lt;/a&gt; (foss club)&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;links: &lt;a href=&#34;https://github.com/amateurmonke&#34;&gt;github&lt;/a&gt; · &lt;a href=&#34;mailto:anshulparuchuri@gmail.com&#34;&gt;mail&lt;/a&gt; · &lt;a href=&#34;https://instagram.com/anshulp.jpg&#34;&gt;photography&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;this site is inspired by my friend &lt;a href=&#34;https://adihegde.com&#34;&gt;aditya hegde&lt;/a&gt;&#39;s site.&lt;/p&gt;&#xA;&lt;div class=&#34;scrobbles-section&#34;&gt;&#xA;&lt;h2&gt;recent scrobbles&lt;/h2&gt;&#xA;&lt;div id=&#34;lastfm-scrobbles&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>photography</title>
      <link>https://anshulparuchuri.com/photography.html/</link>
      <pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
      <author>Anshul Paruchuri</author>
      <guid>https://anshulparuchuri.com/photography.html</guid>
      <description>&lt;div id=&#34;unsplash-gallery&#34; class=&#34;unsplash-gallery&#34;&gt;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>resume</title>
      <link>https://anshulparuchuri.com/resume.html/</link>
      <pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate>
      <author>Anshul Paruchuri</author>
      <guid>https://anshulparuchuri.com/resume.html</guid>
      <description>&lt;p&gt;I am actively looking for internship opportunities in Bengaluru (or remote), primarily in Data Analytics, MLOps and AI Infrastructure during Fall 2026. If something sounds relevant, please reach out to me via email (&lt;a href=&#34;mailto:anshulparuchuri@gmail.com&#34;&gt;anshulparuchuri@gmail.com&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/static/files/anshul_resume.pdf&#34; download class=&#34;resume-download&#34;&gt;download resume (pdf)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;iframe src=&#34;/static/files/anshul_resume.pdf&#34; class=&#34;pdf-viewer&#34; title=&#34;resume&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p id=&#34;resume-updated&#34; class=&#34;resume-updated&#34;&gt;&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
