Home
Softono

Chatbotfullpipeline

Open source Python
18
Stars
4
Forks
0
Issues
0
Watchers
3 months
Last Commit

 About Chatbotfullpipeline

Personalized Multimodal AI Agent via Google ADK & Gemini. Featuring Realtime Soniox STT, Long-term Memory (mem0), and LLM-generated Wiki Knowledge Base (inspired by Karpathy)

Platforms

Web Self-hosted Cloud

Languages

Python

Need Help Installing Chatbotfullpipeline?

We provide expert installation service for this software. Our team will install, configure, and secure Chatbotfullpipeline on your server. plans start at just $30.

Chatbotfullpipeline

View on GitHub

πŸ€– MemRAG Chatbot

Multimodal AI Research Assistant được xΓ’y dα»±ng trΓͺn Google Agent Development Kit (ADK)

KαΊΏt hợp RAG Β· Bα»™ nhα»› dΓ i hαΊ‘n Β· Transcription thời gian thα»±c Β· Wiki Knowledge Graph

Live Demo


πŸ›  Tech Stack

Python FastAPI Google Gemini React TypeScript Vite TailwindCSS

AWS ECS S3 DynamoDB RDS ElastiCache CloudFront

Qdrant Terraform GitHub Actions Docker


✨ TΓ­nh nΔƒng nα»•i bαΊ­t

Tính năng Mô tả
πŸš€ Realtime Chat Streaming SSE token-by-token, phαΊ£n hα»“i tα»©c thΓ¬
πŸ“„ Multimodal PDF RAG Upload PDF β†’ chunk β†’ embed β†’ semantic search vα»›i trΓ­ch dαΊ«n
🧠 Long-term Memory TΓ­ch hợp mem0 ghi nhα»› thΓ΄ng tin cΓ‘ nhΓ’n xuyΓͺn phiΓͺn
πŸŽ™οΈ Realtime Transcription Soniox STT, 60+ ngΓ΄n ngα»―, tα»± lΖ°u transcript β†’ RAG
🌐 Wiki Knowledge Graph Tα»± tα»•ng hợp tα»« tΓ i liệu + meetings, visualize bαΊ±ng React Flow
⚑ Redis Caching ElastiCache cache wiki/graph/session/docs β€” giαΊ£m latency
πŸ” Auth JWT + Google OAuth2, refresh token rotation, CSRF protection
πŸ—οΈ IaC ToΓ n bα»™ hαΊ‘ tαΊ§ng AWS quαΊ£n lΓ½ bαΊ±ng Terraform

πŸ›οΈ KiαΊΏn trΓΊc hệ thα»‘ng

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        USER (Browser)                                    β”‚
β”‚              https://d3qrt08bgfyl3d.cloudfront.net                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚ HTTPS
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚         CloudFront           β”‚
              β”‚   /api/* β†’ ALB (proxy)       β”‚
              β”‚   /*     β†’ S3 Frontend       β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β”‚          β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”  β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β”‚  S3 Bucket   β”‚  β”‚  Application Load Balancer   β”‚
          β”‚  (React SPA) β”‚  β”‚  memrag-backend-alb-*.elb    β”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                         β”‚
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚              ECS EC2 β€” FastAPI Backend               β”‚
              β”‚                   Port 8000                          β”‚
              β”‚                                                      β”‚
              β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
              β”‚  β”‚ Chat API β”‚  β”‚ Docs API β”‚  β”‚ Wiki / Auth API  β”‚  β”‚
              β”‚  β”‚  (SSE)   β”‚  β”‚ (upload) β”‚  β”‚ Transcription WS β”‚  β”‚
              β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
              β”‚       β”‚             β”‚                  β”‚            β”‚
              β”‚  β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
              β”‚  β”‚      Google ADK Agent (Gemini 2.5-flash)        β”‚ β”‚
              β”‚  β”‚           9 Tools + ContextFilterPlugin         β”‚ β”‚
              β”‚  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
              β”‚       β”‚    β”‚    β”‚    β”‚    β”‚    β”‚                     β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β”‚    β”‚    β”‚    β”‚    β”‚    β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ” β”Œβ”€β–Όβ”€β”€β” β”‚ β”Œβ”€β–Όβ”€β”€β” β”‚ β”Œβ”€β–Όβ”€β”€β”€β”€β”€β”€β”
          β”‚  ElastiCacheβ”‚ β”‚mem0β”‚ β”‚ β”‚Wikiβ”‚ β”‚ β”‚DynamoDBβ”‚
          β”‚  Redis Cacheβ”‚ β”‚    β”‚ β”‚ β”‚S3  β”‚ β”‚ β”‚Sessionsβ”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”Œβ”€β”€β–Όβ”€β”€β”  β”Œβ”€β”€β–Όβ”€β”€β”€β”€β”
                              β”‚     β”‚  β”‚  RDS  β”‚
                              β”‚Qdrant  β”‚Postgresβ”‚
                              β”‚(RAG)β”‚  β”‚(Auth) β”‚
                              β””β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”„ Data Flow

πŸ’¬ Chat Flow

User nhαΊ―n tin
    └─► POST /api/v1/chat/stream (SSE)
            └─► ChatService._ensure_session() [DynamoDB]
                    └─► ContextFilterPlugin (tΓ³m tαΊ―t nαΊΏu > 22 msgs)
                            └─► ADK Runner β†’ Gemini 2.5-flash
                                    β”œβ”€β–Ί read_wiki_index / read_wiki_page
                                    β”œβ”€β–Ί search_documents (RAG β€” Qdrant)
                                    β”œβ”€β–Ί retrieve_memories (mem0)
                                    └─► ─── SSE stream tokens ──► Browser

πŸ“„ Upload PDF Flow

Upload PDF
    └─► POST /api/v1/documents/upload
            β”œβ”€β–Ί extract text β†’ StorageBackend.save() [S3]
            β”œβ”€β–Ί RAGService: chunk β†’ embed β†’ Qdrant upsert
            β”œβ”€β–Ί Cache.delete("docs:{user_id}:list")
            └─► [background] WikiService 4-phase pipeline
                    β”œβ”€β–Ί Phase 1 MAP:    extract entities/topics (parallel)
                    β”œβ”€β–Ί Phase 2 REDUCE: merge + deduplicate by slug
                    β”œβ”€β–Ί Phase 3 SYNTH:  LLM synthesize per page β†’ S3
                    └─► Phase 4 FINAL:  rebuild index + link_index

πŸŽ™οΈ Transcription Flow

Start meeting β†’ POST /transcription/start [DynamoDB]
    β”‚
Audio stream β†’ WS /transcription/audio/{meeting_id}
    └─► SonioxService β†’ Soniox STT β†’ utterances β†’ DynamoDB
    β”‚
Stop meeting β†’ POST /transcription/stop
    β”œβ”€β–Ί TranscriptRAGService.ingest() [Qdrant]
    └─► [background] WikiService.update_wiki_from_transcript()

⚑ Cache Strategy

Request Δ‘αΊΏn API
    β”‚
    β”œβ”€β–Ί Cache.get(key) ──► HIT  ──► Return cached data (< 1ms)
    β”‚
    └─► MISS ──► TΓ­nh toΓ‘n / DB query
                    └─► Cache.set(key, data, ttl)
                            └─► Return data

TTL: wiki_page=10min | wiki_graph=2min | sessions=1min | docs=1min | user=5min

πŸš€ Quickstart β€” Local Dev

YΓͺu cαΊ§u

  • Docker & Docker Compose
  • Node.js 20+
  • Python 3.11+ vα»›i uv
  • Google Gemini API Key

1. Clone & cαΊ₯u hΓ¬nh

git clone https://github.com/minh2004pd/chatbotfullpipeline.git
cd chatbotfullpipeline

# TαΊ‘o file .env tα»« example
cp .env.example .env
# β†’ Điền GEMINI_API_KEY vΓ  cΓ‘c biαΊΏn cαΊ§n thiαΊΏt

2. Khởi Δ‘α»™ng services

# ChαΊ‘y toΓ n bα»™: Redis, Qdrant, DynamoDB Local, Postgres, Backend
docker compose up -d

# Kiểm tra logs backend
docker logs -f memrag-backend

3. ChαΊ‘y Frontend

cd frontend
npm install
npm run dev
# β†’ http://localhost:5173

4. API Docs

URL MΓ΄ tαΊ£
http://localhost:8000/docs Swagger UI
http://localhost:6333/dashboard Qdrant Dashboard
http://localhost:8001 DynamoDB Local

πŸ§ͺ Testing

# ChαΊ‘y toΓ n bα»™ test suite
cd backend && uv run pytest

# Vα»›i coverage report
uv run pytest --cov=app --cov-report=term-missing

# ChαΊ‘y test cα»₯ thể
uv run pytest tests/services/test_wiki_service.py -v

Test coverage:

Module Test file
Wiki pipeline tests/services/test_wiki_service.py
Auth + JWT tests/core/test_auth.py
Session CRUD tests/services/test_dynamo_session_service.py
Cache Service tests/core/test_cache_service.py
RAG Service tests/services/test_rag_service.py

πŸ” CI/CD Pipeline

git push origin main
        β”‚
        β”œβ”€β”€ backend/** thay Δ‘α»•i?
        β”‚       β”‚
        β”‚   β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚   β”‚   JOB: lint      β”‚   β”‚   JOB: test      β”‚  ← chαΊ‘y song song
        β”‚   β”‚  ruff format     β”‚   β”‚ pytest + coverage β”‚
        β”‚   β”‚  ruff check      β”‚   β”‚ upload artifact   β”‚
        β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                      β”‚ cαΊ£ 2 pass
        β”‚            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚            β”‚  JOB: build-push   β”‚  ← push main only
        β”‚            β”‚  docker build      β”‚
        β”‚            β”‚  tag: <sha>+latest β”‚
        β”‚            β”‚  push β†’ ECR        β”‚
        β”‚            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                      β”‚
        β”‚            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚            β”‚   JOB: deploy      β”‚  ← environment: production
        β”‚            β”‚  ECS rolling updateβ”‚
        β”‚            β”‚  wait stable βœ“     β”‚
        β”‚            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚
        └── frontend/** thay Δ‘α»•i?
                β”‚
            β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚  JOB: validate           β”‚
            β”‚  tsc --noEmit + eslint   β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        β”‚
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚  JOB: deploy             β”‚
            β”‚  npm build               β”‚
            β”‚  s3 sync (immutable)     β”‚
            β”‚  CloudFront invalidate   β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

☁️ Infrastructure (AWS)

AWS ap-southeast-2
β”œβ”€β”€ VPC (10.0.0.0/16)
β”‚   β”œβ”€β”€ Public Subnets  β†’ ALB, NAT Gateway
β”‚   └── Private Subnets β†’ ECS EC2, RDS, ElastiCache
β”‚
β”œβ”€β”€ ECS Cluster (EC2 launch type)
β”‚   └── Backend Task (FastAPI :8000)
β”‚
β”œβ”€β”€ Qdrant (ECS Fargate + EFS volume)
β”‚
β”œβ”€β”€ ALB β†’ ECS Backend (port 8000)
β”œβ”€β”€ CloudFront β†’ S3 (frontend) + ALB (/api/*)
β”‚
β”œβ”€β”€ RDS PostgreSQL (db.t3.micro) β€” Auth
β”œβ”€β”€ DynamoDB β€” Sessions + Meetings
β”œβ”€β”€ ElastiCache Redis (cache.t3.micro) β€” Caching
β”œβ”€β”€ S3 β€” Uploads + Wiki pages
└── ECR β€” Docker images

Triển khai:

cd infrastructure

terraform init
terraform plan    # kiểm tra trΖ°α»›c
terraform apply   # tαΊ‘o hαΊ‘ tαΊ§ng (~10-15 phΓΊt)
terraform output  # xem endpoints

Outputs quan trọng:

Output GiΓ‘ trα»‹
cloudfront_url URL frontend public
alb_dns_name Backend ALB endpoint
redis_primary_endpoint ElastiCache Redis
rds_endpoint PostgreSQL host

πŸ“ CαΊ₯u trΓΊc dα»± Γ‘n

.
β”œβ”€β”€ backend/                  # FastAPI + Google ADK
β”‚   β”œβ”€β”€ app/
β”‚   β”‚   β”œβ”€β”€ agents/           # ADK Agent + 9 Tools
β”‚   β”‚   β”œβ”€β”€ api/v1/           # REST endpoints
β”‚   β”‚   β”œβ”€β”€ core/             # Config, Cache, DB, DI
β”‚   β”‚   β”œβ”€β”€ repositories/     # Data access layer
β”‚   β”‚   β”œβ”€β”€ services/         # Business logic
β”‚   β”‚   └── schemas/          # Pydantic models
β”‚   β”œβ”€β”€ tests/                # pytest (~40 test files)
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── pyproject.toml
β”‚
β”œβ”€β”€ frontend/                 # React 18 + Vite + TypeScript
β”‚   └── src/
β”‚       β”œβ”€β”€ api/              # Axios clients
β”‚       β”œβ”€β”€ components/       # UI components
β”‚       β”œβ”€β”€ hooks/            # React Query hooks
β”‚       β”œβ”€β”€ store/            # Zustand state
β”‚       └── types/            # TypeScript types
β”‚
β”œβ”€β”€ infrastructure/           # Terraform (AWS)
β”‚   β”œβ”€β”€ ecs.tf                # ECS cluster + task def
β”‚   β”œβ”€β”€ rds.tf                # PostgreSQL
β”‚   β”œβ”€β”€ elasticache.tf        # Redis
β”‚   β”œβ”€β”€ dynamodb.tf           # Sessions + Meetings
β”‚   β”œβ”€β”€ s3_frontend.tf        # Frontend hosting
β”‚   β”œβ”€β”€ alb.tf                # Load balancer
β”‚   └── variables.tf          # Input variables
β”‚
β”œβ”€β”€ docs/                     # Documentation
β”‚   β”œβ”€β”€ codebase.md           # KiαΊΏn trΓΊc chi tiαΊΏt
β”‚   β”œβ”€β”€ spec.md               # Product specification
β”‚   β”œβ”€β”€ wiki.md               # Wiki system design
β”‚   └── cicd-flow.md          # CI/CD flow
β”‚
β”œβ”€β”€ .github/workflows/
β”‚   β”œβ”€β”€ ci-cd.yml             # Backend CI/CD
β”‚   └── deploy-frontend.yml   # Frontend deploy
β”‚
└── docker-compose.yml        # Local dev stack

πŸ› οΈ Development Rules

Để Δ‘αΊ£m bαΊ£o chαΊ₯t lượng vΓ  deploy mượt mΓ :

  1. πŸ§ͺ ChαΊ‘y full test suite trΖ°α»›c khi hoΓ n thΓ nh bαΊ₯t kα»³ task nΓ o:
    cd backend && uv run pytest
    
  2. πŸ“ Bα»• sung test case cho mọi tΓ­nh nΔƒng mα»›i (unit + integration).
  3. πŸ“š CαΊ­p nhαΊ­t docs β€” docs/, CLAUDE.md, README.md khi thay Δ‘α»•i kiαΊΏn trΓΊc.
  4. 🎨 Format code trΖ°α»›c khi commit:
    cd backend && uv run ruff format .
    

🌐 Environment Variables

BiαΊΏn BαΊ―t buα»™c MΓ΄ tαΊ£
GEMINI_API_KEY βœ… Google Gemini API key
JWT_SECRET_KEY βœ… (prod) JWT signing secret (32+ chars)
STORAGE_BACKEND β€” local hoαΊ·c s3 (default: local)
S3_BUCKET βœ… (nαΊΏu S3) TΓͺn S3 bucket
S3_ACCESS_KEY_ID βœ… (nαΊΏu S3) AWS Access Key
S3_SECRET_ACCESS_KEY βœ… (nαΊΏu S3) AWS Secret Key
QDRANT_URL β€” Qdrant server URL
REDIS_URL β€” Redis connection URL
REDIS_ENABLED β€” BαΊ­t/tαΊ―t cache (default: true)
DATABASE_URL β€” PostgreSQL connection string
SONIOX_API_KEY β€” Soniox STT API key
WIKI_ENABLED β€” BαΊ­t/tαΊ―t wiki pipeline (default: true)
DEBUG β€” Dev mode β€” bỏ qua JWT (true/false)

πŸ“„ License

MIT Β© 2026 minh2004pd