המלצה | ✨חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם✨
-
@יוסי-רחמים כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
@אהרן כי לא סימנת את התיבה של הוי
(בגלל שהוספתי אנגלית חלק מהטקסים לא מוצגים)גם אחרי שסימנתי את הוי [אחרי שיחות ארוכות עם גמיני] והכנסתי את המפתח, עדיין זה לא עבד. לדבריו הקוד מחכה לקבל תשובה בסגנון סטרימינג בזמן שהבינה שולחת תשובה בסגנון ג'סון, כך שהוא לא קולט את התשובה [לא שמידי הבנתי מה שכתבתי, רק הוא ביאר כך]
-
-
@אהרן בזמן השגיאה שאתה לא מצליח להכניס API
-
@אהרן בזמן השגיאה שאתה לא מצליח להכניס API
@יוסי-רחמים כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
@אהרן בזמן השגיאה שאתה לא מצליח להכניס API
את השגיאה הזו פתרתי כשהבנתי שצריך לסמן את התיבת סימון ואז לאשר, המפתח נקלט אח"כ [פשוט הופיע תיבה לאישור אך בלי הטקסט, כפי שהראתי קודם, ורק בסיוע גמיני שקרא את הסקריפט יכולתי להבין שצריך ללחוץ על אישור התיבה]. הבעיה שכעת גם התוסף לא מגיב בכלל לבקשת הסבר, לטענת גמיני כיון שהוא מכוון לקבלת סוג תשובה אחת ומקבל סוג אחר. לא בטוח שזה נכון כי בכלל לא נפתחת תיבה לתשובה, אלא זה כאילו לא לחצתי. בנוסף {כמובן פחות קריטי}, כנראה חוץ מזה שחסר המלל בעברית לתהליך אישור הAPI [כמו שכתבתי] גם לא מופיע בתוסף הסבר על האפשרויות מתחת לכל אפשרות כפי שהופיע פעם, כנראה גם זה לא מופיע בקובץ התרגום.
-
@יוסי-רחמים כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
@אהרן בזמן השגיאה שאתה לא מצליח להכניס API
את השגיאה הזו פתרתי כשהבנתי שצריך לסמן את התיבת סימון ואז לאשר, המפתח נקלט אח"כ [פשוט הופיע תיבה לאישור אך בלי הטקסט, כפי שהראתי קודם, ורק בסיוע גמיני שקרא את הסקריפט יכולתי להבין שצריך ללחוץ על אישור התיבה]. הבעיה שכעת גם התוסף לא מגיב בכלל לבקשת הסבר, לטענת גמיני כיון שהוא מכוון לקבלת סוג תשובה אחת ומקבל סוג אחר. לא בטוח שזה נכון כי בכלל לא נפתחת תיבה לתשובה, אלא זה כאילו לא לחצתי. בנוסף {כמובן פחות קריטי}, כנראה חוץ מזה שחסר המלל בעברית לתהליך אישור הAPI [כמו שכתבתי] גם לא מופיע בתוסף הסבר על האפשרויות מתחת לכל אפשרות כפי שהופיע פעם, כנראה גם זה לא מופיע בקובץ התרגום.
-
@אהרן
עובד לך בנטפרי התוסף?
@יוסי-רחמים
איך אני משנה לעיברית?@smct כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
@אהרן
עובד לך בנטפרי התוסף?לא הבנתי את השאלה, אם השאלה אם יש לי נטפרי, כן ב"ה, אם השאלה אם עובד, עיין בהודעה לפניך [בקיצור, לא], גם בפנאל צד לא עובד, למרות ששם כן נפתחת תיבה.
-
שיחזרתי לגירסא הקודמת תנסו לעדכן את התוסף ואז לבדוק
-
שיחזרתי לגירסא הקודמת תנסו לעדכן את התוסף ואז לבדוק
@יוסי-רחמים אם תוכל להעלות לכאן, למנוטפרים. תודה.
-
@יוסי-רחמים אם תוכל להעלות לכאן, למנוטפרים. תודה.
-
@יוסי-רחמים כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
@מוח-קודח dbb5577e-16db-4d17-9054-96f97b198c10-cglajpafddcffakjmpijpdhlhdkgdebc (1).crx
כל עוד לא תוקנה הבעיה שהיתה שם זה לא יעזור [אימות מפתח דרך מודל לא תקף], תשאיר את הגירסא הקודמת רק תשנה את המודל
-
@יוסי-רחמים כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
@מוח-קודח dbb5577e-16db-4d17-9054-96f97b198c10-cglajpafddcffakjmpijpdhlhdkgdebc (1).crx
כל עוד לא תוקנה הבעיה שהיתה שם זה לא יעזור [אימות מפתח דרך מודל לא תקף], תשאיר את הגירסא הקודמת רק תשנה את המודל
@אהרן כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
@יוסי-רחמים כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
@מוח-קודח dbb5577e-16db-4d17-9054-96f97b198c10-cglajpafddcffakjmpijpdhlhdkgdebc (1).crx
כל עוד לא תוקנה הבעיה שהיתה שם זה לא יעזור [אימות מפתח דרך מודל לא תקף], תשאיר את הגירסא הקודמת רק תשנה את המודל
נשלח לבדיקה
-
פורסם
-
פורסם
@יוסי-רחמים כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
פורסם
יש קובץ למנוטפרים?
-
@יוסי-רחמים כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
פורסם
יש קובץ למנוטפרים?
-
@יוסי-רחמים שגיאת 418
גם במפתח אישי
אזלו הסיכויים למנוטפרים? -
@יוסי-רחמים שגיאת 418
גם במפתח אישי
אזלו הסיכויים למנוטפרים?@מוח-קודח כתב בהמלצה |
חסכו שעות עבודה עם ClarityAI: התוסף שמסכם, מתרגם ומסביר כל דף אינטרנט בשבילכם
:
@יוסי-רחמים שגיאת 418
גם במפתח אישי
אזלו הסיכויים למנוטפרים?עד ש@יוסי-רחמים יתאים את התוסף שלו למנוטפרים, הכנתי משהו זמני, שצריך להוסיף לתוסף tampermonkey, בלי אחריות, ולא ישבתי לדייק אותו, במיוחד שאפילו לא קראתי מה כתוב בו, סמכתי על בינה וראיתי שעובד. רק לשימוש לבינתיים, חובה להוסיף מפתח API של גוגל היכן שכתוב [לתמונות לא הצלחתי להפעיל, כנראה צריך תיקון קל]:
// ==UserScript==
// @name Gemini Universal Explainer (Text & Images) - Lite Model
// @namespace http://tampermonkey.net/
// @version 1.4
// @description מסביר טקסט מסומן או תמונות (Alt+Click) בכל אתר באמצעות Gemini API, כולל צ'אט המשך.
// @author You
// @match :///*
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @connect generativelanguage.googleapis.com
// @connect *
// ==/UserScript==(function() {
'use strict';// ========================================== // הגדרות משתמש - חובה למלא // ========================================== const GEMINI_API_KEY = 'כאן להוסיף את המפתח האישי בין הגרשיים'; // ========================================== const MODEL_NAME = 'gemini-2.5-flash-lite'; const API_URL = `https://generativelanguage.googleapis.com/v1beta/models/${MODEL_NAME}:generateContent?key=${GEMINI_API_KEY}`; let chatHistory = []; let currentContext = null; // שומר את הטקסט או נתוני התמונה שנבחרו let triggerButton, modal, chatContent, inputField, sendBtn, closeBtn, loadingIndicator; // --- הוספת סגנונות CSS (עיצוב) --- GM_addStyle(` #gemini-trigger-btn { position: absolute; z-index: 99999; background: #4285F4; /* Google Blue */ color: white; border: none; border-radius: 50%; width: 32px; height: 32px; cursor: pointer; display: none; box-shadow: 0 2px 5px rgba(0,0,0,0.3); font-size: 16px; align-items: center; justify-content: center; transition: transform 0.2s; } #gemini-trigger-btn:hover { transform: scale(1.1); } #gemini-modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 100000; display: none; justify-content: center; align-items: center; } #gemini-modal { background: white; width: 500px; max-width: 90%; height: 600px; border-radius: 12px; display: flex; flex-direction: column; box-shadow: 0 10px 25px rgba(0,0,0,0.5); overflow: hidden; font-family: sans-serif; direction: rtl; } #gemini-header { padding: 15px; background: #f1f3f4; border-bottom: 1px solid #ddd; display: flex; justify-content: space-between; align-items: center; font-weight: bold; color: #333; } #gemini-close-btn { cursor: pointer; font-size: 20px; color: #666; } #gemini-close-btn:hover { color: #000; } #gemini-chat-content { flex: 1; padding: 15px; overflow-y: auto; background: #fafafa; display: flex; flex-direction: column; gap: 10px; } .gemini-message { padding: 10px 15px; border-radius: 18px; max-width: 80%; line-height: 1.5; word-wrap: break-word; white-space: pre-wrap; } .gemini-user-msg { background: #dcf8c6; align-self: flex-start; border-bottom-right-radius: 4px; color: #000; } .gemini-model-msg { background: #ffffff; border: 1px solid #eee; align-self: flex-end; border-bottom-left-radius: 4px; color: #000; } .gemini-context-preview { font-size: 0.8em; color: #666; font-style: italic; border-bottom: 1px dashed #ccc; margin-bottom: 5px; padding-bottom: 5px; max-height: 60px; overflow: hidden; } .gemini-context-preview img { max-height: 50px; border-radius: 4px; } #gemini-input-area { padding: 10px; border-top: 1px solid #ddd; background: white; display: flex; gap: 10px; } #gemini-input { flex: 1; padding: 10px; border: 1px solid #ccc; border-radius: 20px; outline: none; } #gemini-send-btn { padding: 0 20px; background: #4285F4; color: white; border: none; border-radius: 20px; cursor: pointer; font-weight: bold; } #gemini-send-btn:disabled { background: #ccc; cursor: not-allowed; } #gemini-loading { display: none; align-self: center; margin: 10px; color: #666; font-style: italic; } /* Dark mode support for websites that have it */ @media (prefers-color-scheme: dark) { #gemini-modal { background: #2d2d2d; color: #e0e0e0; } #gemini-header { background: #1e1e1e; border-bottom-color: #444; color: #fff; } #gemini-chat-content { background: #252525; } #gemini-input-area { background: #1e1e1e; border-top-color: #444; } #gemini-input { background: #333; color: white; border-color: #555; } .gemini-model-msg { background: #333; border-color: #444; color: #e0e0e0; } .gemini-user-msg { background: #054740; color: #e0e0e0; } #gemini-close-btn { color: #aaa; } } `); // --- יצירת רכיבי הממשק (UI) --- function createUI() { // כפתור טריגר (נורה) triggerButton = document.createElement('button'); triggerButton.id = 'gemini-trigger-btn'; triggerButton.innerHTML = '💡'; triggerButton.title = 'קבל הסבר מג\'מיני'; document.body.appendChild(triggerButton); // חלונית מודאלית const overlay = document.createElement('div'); overlay.id = 'gemini-modal-overlay'; overlay.innerHTML = ` <div id="gemini-modal"> <div id="gemini-header"> <span>Gemini Explainer</span> <span id="gemini-close-btn">×</span> </div> <div id="gemini-chat-content"></div> <div id="gemini-loading">חושב...</div> <div id="gemini-input-area"> <input type="text" id="gemini-input" placeholder="שאל שאלת המשך..." disabled> <button id="gemini-send-btn" disabled>שלח</button> </div> </div> `; document.body.appendChild(overlay); // שמירת הפניות לאלמנטים modal = overlay; chatContent = overlay.querySelector('#gemini-chat-content'); inputField = overlay.querySelector('#gemini-input'); sendBtn = overlay.querySelector('#gemini-send-btn'); closeBtn = overlay.querySelector('#gemini-close-btn'); loadingIndicator = overlay.querySelector('#gemini-loading'); // הגדרת מאזינים לאירועים בממשק triggerButton.addEventListener('click', startExplanation); closeBtn.addEventListener('click', closeModal); modal.addEventListener('click', (e) => { if (e.target === modal) closeModal(); }); sendBtn.addEventListener('click', sendFollowUp); inputField.addEventListener('keypress', (e) => { if (e.key === 'Enter') sendFollowUp(); }); } // --- לוגיקת אינטראקציה באתר (בחירה/קליק) --- // טיפול בבחירת טקסט document.addEventListener('mouseup', (e) => { // התעלם אם הקליק בתוך המודאל או על הכפתור if (modal.style.display === 'flex' || e.target === triggerButton) return; const selection = window.getSelection(); const selectedText = selection.toString().trim(); if (selectedText.length > 0) { currentContext = { type: 'text', data: selectedText }; showTriggerButton(e.pageX, e.pageY); } else { // אם זו לא תמונה, הסתר כפתור setTimeout(() => { if(triggerButton.style.display === 'flex') hideTriggerButton(); }, 200); } }); // טיפול בלחיצה על תמונה (Alt + Click כדי לא להפריע לגלישה רגילה) document.addEventListener('click', (e) => { if (e.altKey && e.target.tagName === 'IMG') { e.preventDefault(); e.stopPropagation(); const imgUrl = e.target.src; currentContext = { type: 'image', url: imgUrl }; showTriggerButton(e.pageX, e.pageY); } }, true); // Use capture to intercept early function showTriggerButton(x, y) { triggerButton.style.left = `${x + 10}px`; triggerButton.style.top = `${y + 10}px`; triggerButton.style.display = 'flex'; } function hideTriggerButton() { triggerButton.style.display = 'none'; } // --- לוגיקת הצ'אט וה-API --- async function startExplanation() { if (GEMINI_API_KEY === 'הכנס_את_מפתח_ה-API_שלך_כאן' || !GEMINI_API_KEY) { alert('נא להגדיר מפתח API של Gemini בקוד הסקריפט.'); return; } hideTriggerButton(); openModal(); clearChat(); setLoading(true); chatHistory = []; // איפוס היסטוריה let initialPromptParts = []; // הצגת ההקשר שנבחר בחלונית addMessageToChat('context', currentContext); if (currentContext.type === 'text') { const prompt = `הסבר בקצרה בעברית את הטקסט הבא: "${currentContext.data}"`; initialPromptParts = [{ text: prompt }]; chatHistory.push({ role: 'user', parts: initialPromptParts }); await callGeminiAPI(chatHistory); } else if (currentContext.type === 'image') { addMessageToChat('model', 'מוריד ומעבד את התמונה...'); try { const base64Data = await fetchImageAsBase64(currentContext.url); // הסרת הכותרת של ה-base64 אם קיימת (data:image/png;base64,) const base64String = base64Data.split(',')[1]; const mimeType = base64Data.split(';')[0].split(':')[1]; const prompt = "הסבר בקצרה בעברית מה רואים בתמונה הזו."; initialPromptParts = [ { text: prompt }, { inline_data: { mime_type: mimeType, data: base64String } } ]; chatHistory.push({ role: 'user', parts: initialPromptParts }); // מחיקת הודעת ה"מעבד" לפני שליחת הבקשה chatContent.lastChild.remove(); await callGeminiAPI(chatHistory); } catch (error) { setLoading(false); addMessageToChat('model', 'שגיאה בטעינת התמונה: ' + error.message); console.error(error); } } } async function sendFollowUp() { const text = inputField.value.trim(); if (!text) return; inputField.value = ''; addMessageToChat('user', text); setLoading(true); chatHistory.push({ role: 'user', parts: [{ text: text }] }); await callGeminiAPI(chatHistory); } async function callGeminiAPI(contents) { const payload = { contents: contents, generationConfig: { temperature: 0.7, maxOutputTokens: 1024, } }; GM_xmlhttpRequest({ method: "POST", url: API_URL, headers: { "Content-Type": "application/json" }, data: JSON.stringify(payload), onload: function(response) { setLoading(false); if (response.status >= 200 && response.status < 300) { try { const data = JSON.parse(response.responseText); const reply = data.candidates[0].content.parts[0].text; chatHistory.push({ role: 'model', parts: [{ text: reply }] }); addMessageToChat('model', reply); } catch (e) { addMessageToChat('model', 'שגיאה בפענוח התשובה מג\'מיני.'); console.error('Parsing error:', e, response.responseText); } } else { const errorMsg = `שגיאת API: ${response.status} - ${response.statusText}. ייתכן ששם המודל שגוי או לא זמין.`; addMessageToChat('model', errorMsg); console.error('API Error:', response.responseText); } }, onerror: function(error) { setLoading(false); addMessageToChat('model', 'שגיאת רשת בחיבור לג\'מיני.'); console.error('Network error:', error); } }); } // --- פונקציות עזר --- function fetchImageAsBase64(url) { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "GET", url: url, responseType: 'blob', onload: function(response) { if (response.status === 200) { const reader = new FileReader(); reader.onloadend = () => resolve(reader.result); reader.onerror = reject; reader.readAsDataURL(response.response); } else { reject(new Error(`Failed to fetch image: ${response.status}`)); } }, onerror: (err) => reject(err) }); }); } // --- ניהול חלונית המודאל --- function openModal() { modal.style.display = 'flex'; inputField.focus(); } function closeModal() { modal.style.display = 'none'; currentContext = null; } function clearChat() { chatContent.innerHTML = ''; } function setLoading(isLoading) { loadingIndicator.style.display = isLoading ? 'block' : 'none'; inputField.disabled = isLoading; sendBtn.disabled = isLoading; if (!isLoading) inputField.focus(); chatContent.scrollTop = chatContent.scrollHeight; } function addMessageToChat(role, content) { const msgDiv = document.createElement('div'); if (role === 'context') { msgDiv.className = 'gemini-context-preview'; if (content.type === 'text') { msgDiv.textContent = `נבחר: "${content.data.substring(0, 50)}${content.data.length > 50 ? '...' : ''}"`; } else { msgDiv.innerHTML = `נבחרה תמונה: <br><img src="${content.url}" style="max-height:50px;">`; } } else { msgDiv.className = `gemini-message gemini-${role}-msg`; msgDiv.innerHTML = content.replace(/\n/g, '<br>'); } chatContent.appendChild(msgDiv); chatContent.scrollTop = chatContent.scrollHeight; } // אתחול ראשוני createUI();
})();