ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证EchoLingo is an AI-powered IELTS speaking practice platform designed to simulate natural, real-time conversations with an intelligent examiner. Instead of traditional scripted exercises, EchoLingo focuses on interactive speaking experiences that feel closer to talking with a real person.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗EchoLingo is an AI-powered PTE Academic practice platform. It combines LangGraph agent workflows, rubric-grounded feedback, exemplar-grounded practice generation, Azure speech assessment, and a full-stack web app for repeatable PTE practice.
This is a personal full-stack / AI agent engineering project built to explore how LLM applications can move beyond single prompt calls into testable, observable, tool-using workflows.
EchoLingo does not replicate Pearson's official scoring algorithm. Scores and feedback are practice-oriented estimates. Azure Pronunciation Assessment is used as an objective signal for supported spoken tasks.
Core: FastAPI, LangGraph, LangChain, Supabase PostgreSQL/pgvector, DashScope Embeddings, Azure Speech SDK, Next.js, TypeScript
Testing: pytest, Vitest, Playwright
Development workflow: Claude Code with ECC-assisted planning, verification, review, and documentation. Product scope and architecture decisions remain explicit repository artifacts rather than session-only context.
EchoLingo supports these PTE Academic practice flows:
| Area | Features |
|---|---|
| Practice | Individual task practice, Theme Practice, Targeted Practice |
| Mock Exam | 15-task sequence covering all implemented PTE task types |
| Feedback | Structured AI feedback, dimension scores, suggestions, coach tips |
| Speech | Azure TTS stimuli and pronunciation assessment |
| Study Aid | Study Assistant, word lookup, vocabulary list |
| Progress | History, task-type weakness profile, trends, recommendations |
| Platform | Supabase auth/sync, i18n, PWA, responsive UI |
Implemented task types:
flowchart LR
Browser["Next.js App Router UI"] --> API["FastAPI backend"]
API --> Feedback["LangGraph feedback pipeline"]
API --> Assistant["LangGraph Study Assistant"]
API --> Onboarding["LangGraph onboarding assessment"]
API --> Speech["Azure Speech SDK"]
API --> Supabase["Supabase Auth/Postgres"]
Feedback --> RubricRag["Rubric RAG<br/>Supabase pgvector"]
Assistant --> Tools["LangChain tools"]
API --> ExemplarStore["Stimulus exemplars<br/>pgvector + tsvector"]
ExemplarStore --> Hybrid["Dense + sparse retrieval<br/>RRF fusion"]
The frontend does not own LLM or third-party business logic. All secrets and
agent orchestration live in the Python backend. Browser requests go through the
FastAPI base URL configured by NEXT_PUBLIC_API_BASE_URL.
Implemented in backend/services/feedback_graph.py.
flowchart TD
A["retrieve_context"] --> B["process_speech_evaluation"]
B --> C["call_primary"]
B --> D["call_judge"]
C --> E["check_divergence"]
D --> E
E -->|dimension gap > 15| F["retry_primary"]
E -->|no divergence| G["call_coach"]
F --> G
G --> H["finalize"]
Key behavior:
judgeLog, coachSuggestions, and per-request
observability logs such as task_type, rag_chars, diverged, and
retry_count.Implemented in backend/services/study_assistant_graph.py and
backend/tools/study_assistant_tools.py.
The Study Assistant is a multi-turn tool-using helper with three LangChain tools:
navigate_app: returns app navigation help from an allow-listed route map.generate_practice: creates deep links into topic-based text task practice.pte_knowledge: answers PTE format, scoring, timing, and strategy questions.The tool loop is capped at four iterations. Routes are filtered through an allow-list so the model cannot invent application paths. Topic practice defaults to exemplar-grounded generation and switches to news-grounded generation only when the latest user message contains an explicit recency cue.
Implemented in backend/services/onboarding_graph.py.
The onboarding graph:
asyncio.gather.EchoLingo uses two retrieval surfaces:
| Collection | Purpose | Implementation |
|---|---|---|
| Rubric chunks | Ground feedback in task-specific scoring criteria | Supabase pgvector via backend/services/rag.py |
| Stimulus exemplars | Seed realistic practice stimulus generation | Dedicated Postgres table with pgvector + tsvector |
Theme Practice uses hybrid retrieval:
tsvectorbackend/services/exemplar_store.pyGenerated stimuli pass through a local originality guard in
backend/services/originality.py. It computes 4-gram word-shingle Jaccard
overlap against injected exemplars and triggers one regeneration if overlap is
above 0.5.
backend/
main.py FastAPI app entry point
routers/ HTTP endpoints
services/ Agent graphs, RAG, speech, stimulus generation
tools/ LangChain tools
prompts/ YAML prompts and knowledge files
scripts/ Rubric/exemplar ingestion and evaluation scripts
tests/ pytest suite
src/
app/ Next.js App Router pages
components/ Shared UI components
hooks/ Practice and recording lifecycle hooks
lib/ API client, task bank, history, recommendations
locales/ English and Chinese UI strings
types/ Shared TypeScript types
docs/
adr/ Architecture decision records
PROJECT_CONTEXT.md Current project context and architecture notes
DEVELOPMENT_LOG.md Development log
ROADMAP.md Current phase and strategic priorities
npm install
cp .env.example .env.local
Required frontend environment:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
NEXT_PUBLIC_API_BASE_URL=http://localhost:8000
Run the frontend:
npm run dev
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
Required backend environment:
LLM_API_KEY=
LLM_BASE_URL=https://api.deepseek.com
LLM_MODEL=deepseek-chat
AZURE_SPEECH_KEY=
AZURE_SPEECH_REGION=
SUPABASE_URL=
SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
SUPABASE_DB_URL=
DASHSCOPE_API_KEY=
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
CORS_ORIGINS=http://localhost:3000
Run the backend:
uvicorn main:app --reload --host 0.0.0.0 --port 8000
Then open the frontend at http://localhost:3000.
# Frontend quality gates
npm run lint
npm run typecheck
npm run test:unit:run
npm run build
npm run test:e2e
# Backend tests
cd backend
pytest
Database schema and migrations live at the repository root:
supabase-schema.sqlsupabase-migration-001.sql through supabase-migration-006.sqlRAG-related setup:
backend/scripts/setup_pgvector.sql enables pgvector-related database setup.backend/scripts/seed_rubrics.py embeds rubric YAML files into the rubric
vector store.backend/scripts/embed_exemplars.py embeds accepted stimulus exemplars into
the hybrid retrieval table.Some exemplar source data is intentionally gitignored. The code supports both public-source scraping and private local recall-question ingestion, but private data is not committed.
The most useful project docs are:
docs/README.md for the documentation map and maintenance policy.docs/PROJECT_CONTEXT.md for the current architecture and domain model.docs/ROADMAP.md for the current phase and strategic priorities.docs/adr/0005-langgraph-rag-refactor.md for the feedback pipeline decision.docs/adr/0008-stimulus-exemplar-model.md for exemplar-grounded generation.docs/adr/0009-hybrid-retrieval-theme-practice.md for hybrid retrieval.docs/adr/0010-study-assistant-tool-using-agent.md for the Study Assistant.This repository is currently a personal portfolio project. Add a license before using it as an open-source dependency or redistributing it.