diff --git a/local_setup.md b/local_setup.md new file mode 100644 index 00000000000..d93a1e689ec --- /dev/null +++ b/local_setup.md @@ -0,0 +1,161 @@ +# INSTRUCTIONS FOR DEPLOYING TRANSLATION SERVICES LOCALLY + +## Fork Repositories +- Fork llm-experiment-microservice-jack repo: https://github.com/CMU-313/llm-experiment-microservice-jack +- Fork nodebb-fall-2025-jack repo: https://github.com/CMU-313/nodebb-fall-2025-jack + +Clone the llm-experiment-microservice-jack repo and open it in a DevContainer. + +--- + +## STEP 1: In llm-experiment-microservice-jack repo + +1. Run: + ```bash + uv init + uv add -r requirements.txt + ``` + +2. Install Ollama: + ```bash + curl -fsSL https://ollama.com/install.sh | sh + ``` + +3. Restart your terminal and verify: + ```bash + ollama --version + ``` + +4. Start the Ollama background server (keep this window open): + ```bash + ollama serve + ``` + +5. In a new terminal, pull the model and start Flask: + ```bash + ollama pull qwen3:0.6b + uv run flask run + ``` + +6. Test your translator service by visiting: + ``` + http://127.0.0.1:5000/?content=Dies%20ist%20eine%20Nachricht%20auf%20Deutsch + ``` + +Expected output: +```json +{"is_english": false, "translated_content": "This is a German message"} +``` + +### LEAVE BOTH THE FLASK SERVER AND OLLAMA RUNNING + +--- + +Clone nodebb-fall-2025-jack and open it in a DevContainer. + +## STEP 2: In nodebb-fall-2025-jack repo + +1. Set the environment variable: + - If **not** inside a DevContainer: + ```bash + export TRANSLATOR_API_BASE="http://127.0.0.1:5000" + ``` + - If **inside** a DevContainer: + ```bash + export TRANSLATOR_API_BASE="http://host.docker.internal:5000" + ``` + +2. Build NodeBB: + ```bash + ./nodebb build + ``` + +3. Start NodeBB: + ```bash + ./nodebb start + ``` + +--- + +## Verification Steps + +- Note: **posts will take a while to translate** and **older posts will have the translation button but will not give translations. ** +- Create a **new post in a non-english language** (old posts won’t have `isEnglish` fields). +ex post text: (thai) + ``` + นี่คือข้อความภาษาไทย + ``` +- Create a **new post in english language** if necessary to verify that the button still appears but upon clicking shows the original text + +- If your microservice is running, you will see a **blue button** labeled: + > “Click here to view the translated message.” + +- Clicking the button toggles visibility of the translated text. + + + + + +### Expected Results + +- Posts with `isEnglish: true` → translation button still shows up but shows original english text +- Posts with `isEnglish: false` → button appears and shows the translated message when clicked + +image +image +image + + +## Troubleshooting + +### Button not showing? + +**Check 1: Did you build?** +```bash +./nodebb build +``` + +**Check 2: Is the post NEW?** +- Delete old test posts +- Create a fresh post after building + +**Check 3: Check the database** +```bash +# Redis +redis-cli +HGETALL post:1 # Check if isEnglish and translatedContent exist +``` + +**Check 4: Check browser console** +- Open DevTools (F12) +- Look for JavaScript errors +- Check if topic.js loaded + +**Check 5: Check if translator is being called** +```bash +# Look for translation logs in NodeBB output +tail -f logs/output.log +``` + +**Check 6: Check if you set the right environment** +```bash +#if not in devcontainer: http://127.0.0.1:5000, else : http://host.docker.internal:5000 +echo $TRANSLATOR_API_BASE +``` + +### Hard refresh +If templates are cached: +```bash +# Clear browser cache or hard refresh +Ctrl+Shift+R (Windows/Linux) +Cmd+Shift+R (Mac) +``` + +## Expected Flow + +1. User creates post with "Hola mundo" +2. `src/posts/create.js` calls `translator.translate()` +3. Translator calls your microservice +4. Stores `isEnglish: false` and `translatedContent: "Hello world"` +5. Button appears +6. Click → translation shows