~/paras-karki · portfolio

Loading portfolio

Skip to content
PK

Full Stack Developer · Toronto, ON

Hi, I'm Paras.

I build with Python (Django, FastAPI), React and Next.js, PostgreSQL, and the APIs and pipelines between them.

Currently working on

  • Document extraction with OCR
  • Building AI agent workflows
  • Data normalization and review with LLMs
  • Deploying open-source models on the cloud
Sep 2025 – presentAI & AgentsSoftware

Document-extraction pipeline

Insurance documents in, structured records out: classified, read by vision and language models, checked, and saved.

Now · each document type matched to the model that measured best · lower cost per document

in

  • PDF upload
  • blob URI
  • Excel
Blob Storagerec_8f2c41

sorted by type → read by

Dense form
NuExtract 3JSON outown GPUDoclingcheckboxesown GPU
Schedule / table
PaddleOCRtext + boxesown GPUKimiAI Foundry API
General PDF
PaddleOCRtext + boxesown GPUKimiAI Foundry API

fields out · json

  • Named Insured

    …

  • Policy Number

    …

  • Effective Date

    …

  • Occupancy: Owner Occupied

    …

  • Building Coverage

    …

  • Producer / Agency

    …

saved →PostgreSQLone row per recordExternal system APIsubmitted step by step
indexed →EmbeddingsPostgreSQL + pgvectorAzure AI Searchsearch indexretrievalsemanticvectorkeywordhybridHow search uses it →

01 Intake. A PDF upload, a blob URI or an Excel file. Each lands in Azure Blob Storage under one record ID.

How it was built →
Sep 2025 – presentSoftware

Step-by-step policy submission

A multi-screen policy-creation flow that saves every step as it's submitted and sends it to the policy system.
  • Step-by-step screens

    Account, locations, loss history, and property and values, each its own step.

    ReactNext.jsTypeScript

  • Saved per step

    Each step's payload is saved when it's submitted.

    DjangoPostgreSQL

  • Pick up where you left off

    A session can stop and resume without losing progress.

  • Sent to the policy system

    The saved steps go to the policy system's API.

    External system API

How it was built →
Sep 2025 – presentAI & AgentsSoftware

Search and answers over the document archive

Embeddings in PostgreSQL, an Azure AI Search index, and a RAG layer on top: ask in plain English, get an answer that cites its source.
  1. 01 Embed question
  2. 02 SearchORDER BY embedding <=> $question LIMIT 3
  3. 03 Answer from chunks

property-policy-wording.pdf

  • Covered causes of loss include fire, lightning, windstorm and hail.
  • Sudden and accidental discharge of water from a plumbing system is covered.#1 cosine 0.89
  • Excluded: seepage or leakage continuing over 14 days or more.#2 cosine 0.83

property-schedule-guide.pdf

  • Form PC-1 lists each location with its construction, occupancy, protection and exposure.
  • Every building on Form PC-1 needs a replacement value and the year built.
  • Sprinkler and alarm details go in the protection section of the form.

underwriting-guidelines.pdf

  • Buildings valued up to $5M may be quoted without referral.
  • Buildings older than 1950 are referred to a senior underwriter.
  • Sprinklered risks receive a 10% rate credit.

claims-handbook.pdf

  • Claims should be reported within 30 days of the date of loss.
  • Photos and a repair estimate are required for water claims.#3 cosine 0.76

synthetic documents · illustrative scores · cut-off 0.60

answer · PostgreSQL + pgvector

Yes, a burst pipe is a sudden and accidental discharge, which is covered. Slow leaks that went on for 14 days or more are excluded. To claim, send photos and a repair estimate.

The question never says "plumbing"; vectors match it by meaning.

How it was built →

Paras Karki · CV

page 1 of 2

Paras Karki: software, AI and IT infrastructure