# leonardo1364/serverless-chat-langchainjs architecture

> Architecture diagram of the GitHub repository leonardo1364/serverless-chat-langchainjs, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/leonardo1364/serverless-chat-langchainjs
- Repository: https://github.com/leonardo1364/serverless-chat-langchainjs

## Overview

This is a serverless RAG support-chat application: users ask questions in a Lit chat UI, the API retrieves document context and streams grounded answers, and citations link back to source PDFs. The documented product also supports PDF ingestion and Azure Blob storage, with Ollama and FAISS alternatives for local use. Sampled handlers establish the chat and document paths; the README documents hosting and storage capabilities, while source for deployment wiring was not sampled.

Main entry points: [`packages/api/src/functions/chat-post.ts`](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/chat-post.ts) (Chat endpoint), [`packages/webapp/src/components/chat.ts`](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/webapp/src/components/chat.ts) (Chat component), [`packages/webapp/src/api.ts`](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/webapp/src/api.ts) (Web API client), [`packages/api/src/functions/documents-post.ts`](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/documents-post.ts) (Document upload)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Chat interface"]
  node_chatui["Chat component<br/>[chat.ts]"]
  node_webapi["Web API client<br/>[api.ts]"]
  node_parser["Message parser<br/>[message-parser.ts]"]
end

subgraph group_api["Serverless API"]
  node_chatfn["Chat endpoint<br/>[chat-post.ts]"]
  node_docpost["Document upload<br/>[documents-post.ts]"]
  node_docget["Document download<br/>[documents-get.ts]"]
  node_responses["HTTP responses<br/>[http-response.ts]"]
end

subgraph group_knowledge["Knowledge pipeline"]
  node_pdf["Source PDFs"]
  node_ingest["PDF extraction and chunking<br/>[documents-post.ts]"]
  node_embed["Embedding models<br/>[documents-post.ts]"]
  node_vector["Vector search<br/>[chat-post.ts]"]
  node_rag["Retrieval and prompt chain<br/>[chat-post.ts]"]
end

subgraph group_platform["Azure platform"]
  node_cosmos[("Cosmos vector database")]
  node_faiss[("Local FAISS store<br/>[constants.ts]")]
  node_blob[("Blob document storage")]
  node_models["Azure OpenAI or Ollama<br/>[chat-post.ts]"]
  node_static["Static Web Apps"]
  node_functions["Azure Functions"]
end

node_user(("Chat user"))

node_user -->|"asks"| node_chatui
node_chatui -->|"requests completion"| node_webapi
node_webapi -->|"posts chat"| node_chatfn
node_chatfn -->|"retrieves context"| node_vector
node_chatfn -->|"runs chain"| node_rag
node_rag -->|"generates answer"| node_models
node_vector -.->|"searches vectors"| node_cosmos
node_vector -.->|"searches vectors"| node_faiss
node_chatfn -.->|"embeds query"| node_models
node_chatfn -->|"streams NDJSON"| node_webapi
node_webapi -->|"yields chunks"| node_chatui
node_chatui -->|"parses messages"| node_parser
node_parser -->|"returns citations"| node_chatui
node_chatui -->|"requests citation URL"| node_webapi
node_webapi -->|"fetches PDF"| node_docget
node_user -->|"uploads PDF"| node_docpost
node_docpost -->|"extracts and splits"| node_ingest
node_ingest -->|"embeds chunks"| node_embed
node_embed -.->|"writes vectors"| node_cosmos
node_embed -.->|"writes vectors"| node_faiss
node_docpost -.->|"stores PDF"| node_blob
node_docget -.->|"reads PDF"| node_blob
node_docget -.->|"reads local PDF"| node_pdf
node_docpost -->|"returns status"| node_responses
node_docget -->|"returns document"| node_responses
node_chatfn -->|"returns stream"| node_responses
node_static -->|"hosts"| node_chatui
node_functions -->|"dispatches"| node_chatfn
node_functions -->|"dispatches"| node_docpost
node_functions -->|"dispatches"| node_docget

click node_chatui "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/webapp/src/components/chat.ts"
click node_webapi "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/webapp/src/api.ts"
click node_parser "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/webapp/src/message-parser.ts"
click node_chatfn "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/chat-post.ts"
click node_docpost "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/documents-post.ts"
click node_docget "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/documents-get.ts"
click node_responses "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/http-response.ts"
click node_pdf "https://github.com/leonardo1364/serverless-chat-langchainjs/tree/main/data"
click node_ingest "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/documents-post.ts"
click node_embed "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/documents-post.ts"
click node_vector "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/chat-post.ts"
click node_rag "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/chat-post.ts"
click node_faiss "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/constants.ts"
click node_models "https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/chat-post.ts"
click node_functions "https://github.com/leonardo1364/serverless-chat-langchainjs/tree/main/packages/api/src/functions"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_chatui,node_webapi,node_parser,node_user toneBlue
class node_chatfn,node_docpost,node_docget,node_responses toneAmber
class node_pdf,node_ingest,node_embed,node_vector,node_rag toneMint
class node_cosmos,node_faiss,node_blob,node_models,node_static,node_functions toneRose
```

## Components

### Chat interface

- [Chat component](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/webapp/src/components/chat.ts): `packages/webapp/src/components/chat.ts`
- [Web API client](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/webapp/src/api.ts): `packages/webapp/src/api.ts`
- [Message parser](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/webapp/src/message-parser.ts): `packages/webapp/src/message-parser.ts`

### Serverless API

- [Chat endpoint](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/chat-post.ts): `packages/api/src/functions/chat-post.ts`
- [Document upload](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/documents-post.ts): `packages/api/src/functions/documents-post.ts`
- [Document download](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/documents-get.ts): `packages/api/src/functions/documents-get.ts`
- [HTTP responses](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/http-response.ts): `packages/api/src/http-response.ts`

### Knowledge pipeline

- [Source PDFs](https://github.com/leonardo1364/serverless-chat-langchainjs/tree/main/data): `data`
- [PDF extraction and chunking](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/documents-post.ts): `packages/api/src/functions/documents-post.ts`
- [Embedding models](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/documents-post.ts): `packages/api/src/functions/documents-post.ts`
- [Vector search](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/chat-post.ts): `packages/api/src/functions/chat-post.ts`
- [Retrieval and prompt chain](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/chat-post.ts): `packages/api/src/functions/chat-post.ts`

### Azure platform

- **Cosmos vector database**
- [Local FAISS store](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/constants.ts): `packages/api/src/constants.ts`
- **Blob document storage**
- [Azure OpenAI or Ollama](https://github.com/leonardo1364/serverless-chat-langchainjs/blob/main/packages/api/src/functions/chat-post.ts): `packages/api/src/functions/chat-post.ts`
- **Static Web Apps**
- [Azure Functions](https://github.com/leonardo1364/serverless-chat-langchainjs/tree/main/packages/api/src/functions): `packages/api/src/functions`

### Other components

- **Chat user**

## Connections

- Chat user → Chat component: asks
- Chat component → Web API client: requests completion
- Web API client → Chat endpoint: posts chat
- Chat endpoint → Vector search: retrieves context
- Chat endpoint → Retrieval and prompt chain: runs chain
- Retrieval and prompt chain → Azure OpenAI or Ollama: generates answer
- Vector search → Cosmos vector database: searches vectors
- Vector search → Local FAISS store: searches vectors
- Chat endpoint → Azure OpenAI or Ollama: embeds query
- Chat endpoint → Web API client: streams NDJSON
- Web API client → Chat component: yields chunks
- Chat component → Message parser: parses messages
- Message parser → Chat component: returns citations
- Chat component → Web API client: requests citation URL
- Web API client → Document download: fetches PDF
- Chat user → Document upload: uploads PDF
- Document upload → PDF extraction and chunking: extracts and splits
- PDF extraction and chunking → Embedding models: embeds chunks
- Embedding models → Cosmos vector database: writes vectors
- Embedding models → Local FAISS store: writes vectors
- Document upload → Blob document storage: stores PDF
- Document download → Blob document storage: reads PDF
- Document download → Source PDFs: reads local PDF
- Document upload → HTTP responses: returns status
- Document download → HTTP responses: returns document
- Chat endpoint → HTTP responses: returns stream
- Static Web Apps → Chat component: hosts
- Azure Functions → Chat endpoint: dispatches
- Azure Functions → Document upload: dispatches
- Azure Functions → Document download: dispatches
