From 9ab2c93108a269c16d41120e0c966a57f3b86fd9 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 18 Mar 2026 21:13:01 +0000 Subject: [PATCH 1/3] Update README to reflect migration from AssemblyAI to Inworld STT - Remove AssemblyAI prerequisite and API key requirement - Update .env example to only require INWORLD_API_KEY - Replace AssemblyAI service table row with Inworld (covers both AI and STT) - Update architecture description to reference Inworld STT with energy-based VAD - Replace ASSEMBLY_AI_EAGERNESS env var with INWORLD_STT_EAGERNESS https://claude.ai/code/session_0115HHyFw6kHJ7rNVXLm5U4u --- README.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 20af85d..1a5b90f 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@ A conversational language learning app powered by Inworld AI Runtime. Practice s - Node.js (v20 or higher) - npm - An Inworld AI account and API key -- An AssemblyAI account and API key (for speech-to-text) ## Get Started @@ -39,13 +38,11 @@ Create a `backend/.env` file: ```bash INWORLD_API_KEY=your_inworld_base64_key -ASSEMBLY_AI_API_KEY=your_assemblyai_key ``` -| Service | Get Key From | Purpose | -| -------------- | --------------------------------------------------- | --------------------------------- | -| **Inworld** | [platform.inworld.ai](https://platform.inworld.ai/) | AI conversations (Base64 API key) | -| **AssemblyAI** | [assemblyai.com](https://www.assemblyai.com/) | Speech-to-text | +| Service | Get Key From | Purpose | +| ----------- | --------------------------------------------------- | ------------------------------------------------ | +| **Inworld** | [platform.inworld.ai](https://platform.inworld.ai/) | AI conversations & speech-to-text (Base64 API key) | ### Step 4: Run the Application @@ -143,7 +140,7 @@ The app uses a real-time audio streaming architecture: 1. **Frontend** captures microphone audio and streams it via WebSocket 2. **Backend** processes audio through an Inworld Runtime graph: - - AssemblyAI handles speech-to-text with voice activity detection + - Inworld STT handles speech-to-text with energy-based voice activity detection - LLM generates contextual responses in the target language - TTS converts responses back to audio 3. **Flashcards** are auto-generated from conversation vocabulary @@ -169,11 +166,10 @@ Without Supabase, the app works in anonymous mode using localStorage (no memory | Variable | Required | Description | | --------------------------- | -------- | ------------------------------------------------------------------ | | `INWORLD_API_KEY` | Yes | Inworld AI Base64 API key | -| `ASSEMBLY_AI_API_KEY` | Yes | AssemblyAI API key | | `PORT` | No | Server port (default: 3000) | | `LOG_LEVEL` | No | `trace`, `debug`, `info`, `warn`, `error`, `fatal` (default: info) | | `NODE_ENV` | No | Set to `production` for production log format | -| `ASSEMBLY_AI_EAGERNESS` | No | Turn detection: `low`, `medium`, `high` (default: high) | +| `INWORLD_STT_EAGERNESS` | No | Turn detection: `low`, `medium`, `high` (default: high) | | `SUPABASE_URL` | No | Supabase project URL (enables memory feature) | | `SUPABASE_SECRET_KEY` | No | Supabase secret key (for backend memory storage) | From 4adbb033d8c20bc452132991d7758de0f6a43945 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 18 Mar 2026 21:17:35 +0000 Subject: [PATCH 2/3] Remove ASSEMBLY_AI_API_KEY from CONTRIBUTING.md setup instructions Addresses PR review comment: CONTRIBUTING.md still referenced the old AssemblyAI key after the migration to Inworld STT. Only INWORLD_API_KEY is required now. https://claude.ai/code/session_0115HHyFw6kHJ7rNVXLm5U4u --- CONTRIBUTING.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 51f0e4c..3216773 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,7 +33,6 @@ Thank you for your interest in contributing to the Language Learning App! This d ```bash INWORLD_API_KEY=your_api_key_here - ASSEMBLY_AI_API_KEY=your_api_key_here ``` 5. **Verify the setup**: From 95155607e3bb98d69886929f945ca599878163db Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 18 Mar 2026 21:17:54 +0000 Subject: [PATCH 3/3] Update frontend/package-lock.json after npm install https://claude.ai/code/session_0115HHyFw6kHJ7rNVXLm5U4u --- frontend/package-lock.json | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5d0a7b8..8b55696 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -84,7 +84,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -424,7 +423,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -448,7 +446,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -1667,7 +1664,6 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1736,7 +1732,6 @@ "integrity": "sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.51.0", "@typescript-eslint/types": "8.51.0", @@ -2099,7 +2094,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2232,7 +2226,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2627,7 +2620,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -2688,7 +2680,6 @@ "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -3330,7 +3321,6 @@ "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "cssstyle": "^4.1.0", "data-urls": "^5.0.0", @@ -3700,7 +3690,6 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -3753,7 +3742,6 @@ "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -3792,7 +3780,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -4145,7 +4132,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4231,7 +4217,6 @@ "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -4547,7 +4532,6 @@ "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" }