בקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר
- 
@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
זה הקובץ פייתון (מתמלל מצוין, אגב)
@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
return recognizer.recognize_google(data, language="he-IL")ברור שזה מזהה מצוין, כי זה STT של גוגל והשרת עושה 0 עגול של עבודה
@צדיק-תמים כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
זה הקובץ פייתון (מתמלל מצוין, אגב)
@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
return recognizer.recognize_google(data, language="he-IL")ברור שזה מזהה מצוין, כי זה STT של גוגל והשרת עושה 0 עגול של עבודה
נכון, אני ממש מבסוט מזה שלא צריך להסתבךעם ספריות ותלויות, רק מקוה שלא יחסמו את זה יום אחד...
 - 
@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
"yemot-router2": "file:.."
תסיר את yemot-router2 ותתקין מחדש מnpm
@צדיק-תמים כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
"yemot-router2": "file:.."
תסיר את yemot-router2 ותתקין מחדש מnpm
זה מה שעשיתי וזה השתנה למשהו אחר.
אבל לענין הכי בוער אין לך תשובה? זה ממש מתסכל... אולי איך שהספריה עובדת מאחורי הקלעים?
 - 
@צדיק-תמים כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
"yemot-router2": "file:.."
תסיר את yemot-router2 ותתקין מחדש מnpm
זה מה שעשיתי וזה השתנה למשהו אחר.
אבל לענין הכי בוער אין לך תשובה? זה ממש מתסכל... אולי איך שהספריה עובדת מאחורי הקלעים?
 - 
@צדיק-תמים מה ששלחתי מקודם זה כל הקוד.
הענין הוא שאין שם שום call.idוכו' לפני כן... - 
@צדיק-תמים מה ששלחתי מקודם זה כל הקוד.
הענין הוא שאין שם שום call.idוכו' לפני כן... - 
@עידו300 השגיאה נזרקת כשאקספרס מסמן שכבר נשלחו לקליינט הheaders, אתה צריך לבדוק איפה קודם אתה מחזיר תשובה בדרך כלשהיא
@צדיק-תמים אין...
 - 
ב"ה מצאתי את הבעיה והוא כבר לא זורק שגיאה.
אבל עכשיו יש בעיה מוזרה...
מסיבה לא ברורה הוא לא מחכה שתגיע תשובה מהסקריפט הנ"ל אלא ממשיך הלאה ורק אח"כ מגיעה התשובה, מה שגורם לזה שהפלט למשתמש וללוג מגיע בלי התשובה...
השתמשתי בawait כמובן.let textFromSpeech=""; let ans = await call.read([{type: 'text', data: "אנא הקלט משהו"}], "record"); **console.log(ans);** await execFile("python3", ["/home/node.stamandsefer.co.il/public_html/recognize.py",ans], (error, stdout, stderr) => { // console.log(stdout); textFromSpeech = stdout; **console.log(textFromSpeech);** if (error) { console.error(error); call.id_list_message([{type:'text', data: "Error processing audio" }]); return; } }); **console.log(` התוצאה היא ${textFromSpeech}`);** call.id_list_message([{type:'text', data: ` התוצאה היא ${textFromSpeech}`}]);ניסיתי לסמן את הקונסולים בשביל ההבנה. בעצם מה שמגיע זה
"1/021.wav"
"התוצאה היא"
והתוצאה שהגיעה...
לא לפי הסדר (כמו שאמר כאן @צדיק-תמים שהawait לא חוסם את זה לגמרי). - 
ב"ה מצאתי את הבעיה והוא כבר לא זורק שגיאה.
אבל עכשיו יש בעיה מוזרה...
מסיבה לא ברורה הוא לא מחכה שתגיע תשובה מהסקריפט הנ"ל אלא ממשיך הלאה ורק אח"כ מגיעה התשובה, מה שגורם לזה שהפלט למשתמש וללוג מגיע בלי התשובה...
השתמשתי בawait כמובן.let textFromSpeech=""; let ans = await call.read([{type: 'text', data: "אנא הקלט משהו"}], "record"); **console.log(ans);** await execFile("python3", ["/home/node.stamandsefer.co.il/public_html/recognize.py",ans], (error, stdout, stderr) => { // console.log(stdout); textFromSpeech = stdout; **console.log(textFromSpeech);** if (error) { console.error(error); call.id_list_message([{type:'text', data: "Error processing audio" }]); return; } }); **console.log(` התוצאה היא ${textFromSpeech}`);** call.id_list_message([{type:'text', data: ` התוצאה היא ${textFromSpeech}`}]);ניסיתי לסמן את הקונסולים בשביל ההבנה. בעצם מה שמגיע זה
"1/021.wav"
"התוצאה היא"
והתוצאה שהגיעה...
לא לפי הסדר (כמו שאמר כאן @צדיק-תמים שהawait לא חוסם את זה לגמרי). - 
@ע-ה-דכו-ע לא מגדיר
רק מה שכתוב בקוד הנ"ל ובimport {execFile} from 'child_process'; - 
@ע-ה-דכו-ע לא מגדיר
רק מה שכתוב בקוד הנ"ל ובimport {execFile} from 'child_process';@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
@ע-ה-דכו-ע לא מגדיר
רק מה שכתוב בקוד הנ"ל ובimport {execFile} from 'child_process';תייבא ככה
תנסה לשנות לזה
import { execFile } from 'child_process/promises';לא מאה אחוז שזה קשור, אבל אני חושב.
 - 
@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
@ע-ה-דכו-ע לא מגדיר
רק מה שכתוב בקוד הנ"ל ובimport {execFile} from 'child_process';תייבא ככה
תנסה לשנות לזה
import { execFile } from 'child_process/promises';לא מאה אחוז שזה קשור, אבל אני חושב.
@ע-ה-דכו-ע כשכותבים ככה הוא זורק שגיאה
 - 
@ע-ה-דכו-ע כשכותבים ככה הוא זורק שגיאה
@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
@ע-ה-דכו-ע כשכותבים ככה הוא זורק שגיאה
נכון, צודק, זה מצריך לכתוב גם את המשך הקוד בתחביר קצת שונה של Promise, לא יודע כרגע לכתוב לך את הקוד הזה מחדש בצורה המתוקנת.
 - 
ב"ה מצאתי את הבעיה והוא כבר לא זורק שגיאה.
אבל עכשיו יש בעיה מוזרה...
מסיבה לא ברורה הוא לא מחכה שתגיע תשובה מהסקריפט הנ"ל אלא ממשיך הלאה ורק אח"כ מגיעה התשובה, מה שגורם לזה שהפלט למשתמש וללוג מגיע בלי התשובה...
השתמשתי בawait כמובן.let textFromSpeech=""; let ans = await call.read([{type: 'text', data: "אנא הקלט משהו"}], "record"); **console.log(ans);** await execFile("python3", ["/home/node.stamandsefer.co.il/public_html/recognize.py",ans], (error, stdout, stderr) => { // console.log(stdout); textFromSpeech = stdout; **console.log(textFromSpeech);** if (error) { console.error(error); call.id_list_message([{type:'text', data: "Error processing audio" }]); return; } }); **console.log(` התוצאה היא ${textFromSpeech}`);** call.id_list_message([{type:'text', data: ` התוצאה היא ${textFromSpeech}`}]);ניסיתי לסמן את הקונסולים בשביל ההבנה. בעצם מה שמגיע זה
"1/021.wav"
"התוצאה היא"
והתוצאה שהגיעה...
לא לפי הסדר (כמו שאמר כאן @צדיק-תמים שהawait לא חוסם את זה לגמרי).@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
לא לפי הסדר (כמו שאמר כאן @צדיק-תמים שהawait לא חוסם את זה לגמרי).
זה לא מה שאמרתי.
 - 
@עידו300 כבר כתבתי לך פעם ללמוד איך אסינכרוניות עובדת...
await רק מעכב את השורות הבאות, לא תוקע את התוכנה, וכיוון שזה בפונקציה אנונימית זה לא יעכב את המעבר לשורה הבאה
תכלס הawait פה הוא רק לסמן שזה משהו ארוך, למעיישה חסר גם async בהגדרה של הפונקציית חץ@צדיק-תמים כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
await רק מעכב את השורות הבאות, לא תוקע את התוכנה, וכיוון שזה בפונקציה אנונימית זה לא יעכב את המעבר לשורה הבאה
ככה הבנתי
 - 
@עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:
@ע-ה-דכו-ע כשכותבים ככה הוא זורק שגיאה
נכון, צודק, זה מצריך לכתוב גם את המשך הקוד בתחביר קצת שונה של Promise, לא יודע כרגע לכתוב לך את הקוד הזה מחדש בצורה המתוקנת.
@ע-ה-דכו-ע אז GPT הביא לי תיקון:
הבעיה בקוד שלך היא שקריאת
execFileהיא אסינכרונית, ולכן הפקודהconsole.log(` התוצאה היא ${textFromSpeech}`); call.id_list_message([...]);מתבצעת לפני שהפונקציה הפנימית של
execFileסיימה לרוץ — כלומר, לפני ש־textFromSpeechעודכן בפועל.כדי לתקן זאת, יש לעטוף את
execFileב־Promiseולחכות לה באמצעותawait.כך זה צריך להיראות:
import { execFile } from 'child_process'; import { promisify } from 'util'; const execFileAsync = promisify(execFile); let textFromSpeech = ""; let ans = await call.read([{ type: 'text', data: "אנא הקלט משהו" }], "record"); console.log("ans:", ans); try { // מריץ את הסקריפט פייתון וממתין לתוצאה const { stdout } = await execFileAsync("python3", [ "/home/node.stamandsefer.co.il/public_html/recognize.py", ans ]); textFromSpeech = stdout.trim(); // הסר רווחים ושורות מיותרות console.log(`התוצאה היא: ${textFromSpeech}`); await call.id_list_message([ { type: 'text', data: `התוצאה היא ${textFromSpeech}` } ]); } catch (error) { console.error("Error:", error); await call.id_list_message([ { type: 'text', data: "אירעה שגיאה בעיבוד האודיו" } ]); }הסבר קצר:
- 
promisify(execFile)הופך את הפונקציה לגרסה תואמת ל־await. - 
השורה
await execFileAsync(...)גורמת לקוד להמתין עד שפייתון יסיים לעבד את הקלט ויחזיר פלט. - 
לאחר מכן אתה יכול להשתמש בתוצאה בביטחון, בלי שהקוד ירוץ מוקדם מדי.
 
אם תרצה — אפשר להוסיף גם טיפול במקרה שהקלט
ansלא מכיל נתיב לקובץ תקין או שההקלטה נכשלה.די כמו שאמרת
תודה רבה לכולם -