AI · Shipsoft · Production

Rate Sheet Agent

Internal quoting no longer waits on re-keying carrier PDFs — sheets become ERP-aligned lane JSON (24+ processed in production).

Role: Senior software developer · primary engineer · Apr 2026 – Present · internal quoting (no public demo)

PythonFastAPICeleryRedisPostgreSQLPydanticOpenAIAWS

Problem

Freight forwarding and quoting teams receive carrier rates as PDFs, spreadsheets, and emails. Layouts differ by line and NVOCC, and downstream ERP quoting needs consistent lanes, equipment rates, surcharge inclusion, validity windows, and canonical charge codes. Re-keying those sheets by hand is slow and easy to get wrong. This service accepts an upload, runs extraction asynchronously, and returns a single lane-centric JSON contract that quoting systems can consume.

Role

At Shipsoft I was the primary engineer on the Rate Sheet Agent: HTTP ingest and job lifecycle, Celery workers, the four-pass extraction pipeline that replaced a CrewAI prototype, carrier-specific profiles, the ERP charge catalog, PostgreSQL job and gazetteer storage, and the regression suite. A colleague bootstrapped the early Redis/repo baseline. The API is live in production for internal quoting only.

What I built

  • Async submit-and-poll REST API for PDF, XLSX, MSG, and EML uploads, with optional bearer auth and OpenAPI docs.
  • Two-process deploy (API + dedicated extraction worker) on Redis/Celery, targeted at AWS Elastic Beanstalk or EC2.
  • Four-pass pipeline: offline evidence extraction, chunk classification, deterministic candidates (ports, equipment, currency, surcharges), then budgeted LLM normalization with schema validation and review flags.
  • Layered carrier profiles so major ocean carriers get the right table, prompt, and charge rules.
  • Canonical charge catalog mapped to the company’s ERP charge master, including applicability and inclusion semantics for quoting.
  • Optional PostgreSQL job store plus an offline UN/LOCODE gazetteer to enrich origin/destination country and location codes.
  • Broad pytest coverage across carriers, catalog mapping, job cancellation, and token-budget behavior; legacy CrewAI path kept only for parity during cutover.

Stack

Python 3.12/3.13, FastAPI, Uvicorn, Pydantic, Celery, Redis, SQLAlchemy, PostgreSQL, OpenAI, pdfplumber, PyMuPDF, openpyxl, BeautifulSoup, extract-msg, AWS Elastic Beanstalk/EC2.

Related

Feeds Shipsoft 2.0 internal quoting rather than replacing the multi-tenant CRM. Sister pipeline: Enquiry Agent (email → CRM enquiry).