<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://mowne.co.in/blog</id>
  <title>Mownetharan · blog</title>
  <author><name>Mownetharan</name></author>
  <link rel="self" type="application/atom+xml" href="https://mowne.co.in/feed.xml" />
  <link rel="alternate" type="text/html" href="https://mowne.co.in/blog" />
  <updated>2026-10-04T09:00:00+05:30</updated>
  <entry>
    <title>The tools I&#39;ve worked with building Health Eligible</title>
    <id>https://mowne.co.in/blog/tools-behind-health-eligible</id>
    <link rel="alternate" type="text/html" href="https://mowne.co.in/blog/tools-behind-health-eligible" />
    <published>2026-10-04T09:00:00+05:30</published>
    <updated>2026-10-04T09:00:00+05:30</updated>
    <summary>The backend, retrieval, voice, evaluation and infrastructure tools I&#39;ve worked with while building Health Eligible.</summary>
    <content type="html">&lt;p&gt;Building Health Eligible has taken me across much more than model APIs: backend development, document processing, voice, evaluation, analytics, and cloud infrastructure. This is an inventory of the tools I&amp;#39;ve worked with along the way, based on the backend repository and its development history as of 4 October 2026.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve grouped them by the work they do. The application, development scripts, evaluation suites, and experiments have different stacks, so appearing here doesn&amp;#39;t mean a tool is running in production today. This list covers directly used tools and explicit integrations, rather than every dependency pulled in by another package.&lt;/p&gt;
&lt;h2 id=&quot;the-backend-foundation&quot;&gt;The backend foundation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python 3.12&lt;/strong&gt; — the language and runtime for the backend, rule processing, and supporting scripts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FastAPI&lt;/strong&gt; — API endpoints, request handling, and dependency injection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Starlette&lt;/strong&gt; — middleware and response primitives beneath the API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uvicorn&lt;/strong&gt; — the ASGI server used to run the application.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pydantic&lt;/strong&gt; — typed request models, structured outputs, and validation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTPX and Requests&lt;/strong&gt; — HTTP clients for service integrations, scraping, evaluation, and scripts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;asyncio&lt;/strong&gt; — Python&amp;#39;s concurrency tools for asynchronous work and streaming paths.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DiskCache&lt;/strong&gt; — a persistent key-value store for conversation sessions. It is backed by SQLite.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;glom&lt;/strong&gt; — reading and updating nested data structures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;python-dotenv&lt;/strong&gt; — loading environment configuration during development and in scripts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;models-and-conversation-orchestration&quot;&gt;Models and conversation orchestration&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OpenAI and its Python SDK&lt;/strong&gt; — model calls and structured extraction, alongside a separate realtime voice integration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anthropic / Claude&lt;/strong&gt; — an alternative chat-model integration through LangChain&amp;#39;s Anthropic adapter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt; — a routing option for model calls through an OpenAI-compatible interface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LangChain&lt;/strong&gt; — chat-model adapters, messages, tools, and agent construction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LangGraph&lt;/strong&gt; — the graph that routes conversation work between components.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The repository also records &lt;strong&gt;Amazon Bedrock&lt;/strong&gt; integration work in its history. I count that experience here, without treating the presence of provider settings as proof that a particular provider is currently serving production traffic.&lt;/p&gt;
&lt;h2 id=&quot;retrieval-and-document-processing&quot;&gt;Retrieval and document processing&lt;/h2&gt;
&lt;p&gt;The regulation-query implementation uses a &lt;strong&gt;PageIndex-style heading tree&lt;/strong&gt; to navigate documents. That is an implementation within the repository; there are also separate scripts using the &lt;strong&gt;PageIndex cloud SDK&lt;/strong&gt; to check document upload and retrieval.&lt;/p&gt;
&lt;p&gt;Around that retrieval work, I&amp;#39;ve used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Beautiful Soup&lt;/strong&gt; — parsing scraped HTML.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;markdownify&lt;/strong&gt; — converting HTML into Markdown for the document pipeline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PyMuPDF&lt;/strong&gt; — reading PDF content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;python-docx&lt;/strong&gt; — reading Word documents for rule extraction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PyYAML&lt;/strong&gt; — loading YAML definitions used in rule and interview processing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON and Markdown&lt;/strong&gt; — formats for structured specifications, cached document trees, and readable regulation content.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;voice-interfaces&quot;&gt;Voice interfaces&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OpenAI Realtime&lt;/strong&gt; — establishing realtime voice sessions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;xAI / Grok Realtime&lt;/strong&gt; — another realtime voice-provider integration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ElevenLabs&lt;/strong&gt; — speech-to-text and streaming text-to-speech services.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voice has involved several approaches over time. The earlier AWS speech path is listed below rather than folded into the current voice integrations.&lt;/p&gt;
&lt;h2 id=&quot;tracing-analytics-and-reporting&quot;&gt;Tracing, analytics, and reporting&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Langfuse&lt;/strong&gt; — tracing model and agent calls, with scripts for session costs and weekly model metrics.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PostHog&lt;/strong&gt; — product events and backend error analytics.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loguru&lt;/strong&gt; — application logging with contextual fields.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pandas&lt;/strong&gt; — working with evaluation datasets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;openpyxl&lt;/strong&gt; — reading spreadsheet-based cases and generating case workbooks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ReportLab&lt;/strong&gt; — generating a PDF data-flow document.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These tools cover different questions: what happened inside a model call, what happened in the application, and how to turn results into something I can inspect.&lt;/p&gt;
&lt;h2 id=&quot;testing-and-evaluation&quot;&gt;Testing and evaluation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pytest&lt;/strong&gt; — automated tests, fixtures, and the offline test suite run in CI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pytest-cov and coverage.py&lt;/strong&gt; — coverage tooling declared in the project&amp;#39;s dependencies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DeepEval&lt;/strong&gt; — conversation-quality evaluation using transcripts, reference cases, and model-based judges.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Giskard&lt;/strong&gt; — a vulnerability scan of the conversation API and RAG evaluation through RAGET.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Locust&lt;/strong&gt; — load-test scenarios for the API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTPX with asyncio&lt;/strong&gt; — custom concurrency probes alongside the dedicated load-test suite.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The repository keeps the Giskard evaluation environment separate from the main environment because of dependency compatibility. Evaluation tools are part of the engineering workflow, not ordinary dependencies of a user conversation.&lt;/p&gt;
&lt;h2 id=&quot;infrastructure-and-deployment&quot;&gt;Infrastructure and deployment&lt;/h2&gt;
&lt;p&gt;The repository&amp;#39;s Terraform and CI configuration describe a container deployment on AWS. This is an inventory of that infrastructure work, rather than an audit of the live AWS account.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt; — building the backend container image.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terraform&lt;/strong&gt; — defining cloud resources and deployment configuration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon ECR&lt;/strong&gt; — the container-image registry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon ECS with Fargate&lt;/strong&gt; — the configured container runtime and service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application Load Balancer&lt;/strong&gt; — routing traffic to the container service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS Certificate Manager&lt;/strong&gt; — the certificate integration used by the HTTPS listener.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon DynamoDB&lt;/strong&gt; — shared request-quota storage in the current backend code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon S3&lt;/strong&gt; — storage used by sharing and incident-reporting features, as well as infrastructure state configuration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon SES and SMTP&lt;/strong&gt; — supported email-delivery paths.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon CloudWatch&lt;/strong&gt; — container-log configuration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS IAM and VPC networking&lt;/strong&gt; — permissions and the network configuration around the service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;boto3 and botocore&lt;/strong&gt; — AWS SDK clients and supporting error handling.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS CLI, Bash, and jq&lt;/strong&gt; — deployment scripts and command-line automation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;development-and-team-workflows&quot;&gt;Development and team workflows&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Git and GitHub&lt;/strong&gt; — version control, branches, and pull requests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Actions&lt;/strong&gt; — automated tests, builds, deployments, and scheduled policy checks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;uv and pip&lt;/strong&gt; — dependency installation and Python environment management; &lt;code&gt;uv.lock&lt;/code&gt; records the locked environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Slack&lt;/strong&gt; — webhook notifications for deployment and policy-review workflows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jira&lt;/strong&gt; — creating and tracking tickets when regulation changes need engineering work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflared&lt;/strong&gt; — the documented workflow for exposing a local deployment through a temporary preview URL.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;prototypes-and-optional-integrations&quot;&gt;Prototypes and optional integrations&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Typesafe AI&amp;#39;s System One / Jev&lt;/strong&gt; appears in benchmarks for extraction, household-roster interpretation, and judging. The application also contains optional ambiguity observation and answer-routing integrations. I treat these as prototype and opt-in work, rather than assuming they are enabled for every conversation.&lt;/p&gt;
&lt;h2 id=&quot;earlier-tools-and-approaches&quot;&gt;Earlier tools and approaches&lt;/h2&gt;
&lt;p&gt;The repository history matters here. It records tools that helped explore an approach, even when that approach was later replaced or removed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Google Gemini CLI&lt;/strong&gt; — an early regulation-query backend that invoked the CLI as a subprocess.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Generative AI SDK and its File API&lt;/strong&gt; — another Gemini-based document-query approach.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DeepAgents&lt;/strong&gt; — an earlier retrieval approach using planning and filesystem tools.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FAISS, OpenAI embeddings, and LangChain&amp;#39;s community loaders and text splitters&lt;/strong&gt; — the earlier vector-search regulation backend, since removed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon Polly&lt;/strong&gt; — the earlier text-to-speech adapter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Amazon Transcribe Streaming, PyAV, and NumPy&lt;/strong&gt; — the earlier audio transcription and decoding path, since removed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SlowAPI&lt;/strong&gt; — an earlier rate-limiting implementation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direct SQLite quota storage&lt;/strong&gt; — an earlier shared quota implementation, replaced by DynamoDB. SQLite still underlies DiskCache&amp;#39;s session store.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Elastic Beanstalk, EC2, Gunicorn, and nginx&lt;/strong&gt; — the earlier deployment path documented in the repository, with legacy deployment files still present. Those files alone don&amp;#39;t establish whether that environment has been retired.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PR-Agent&lt;/strong&gt; — a GitHub Actions experiment for automated pull-request review that was subsequently removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a snapshot of the work so far. Keeping the current code, supporting workflows, experiments, and earlier approaches visible gives me a more useful record than a single undifferentiated list of technologies.&lt;/p&gt;
</content>
    <category term="engineering" />
    <category term="ai" />
    <category term="tools" />
  </entry>
</feed>
