Action

Rewrite with Gemini

Posted by slyfox, Last update 3 days ago - Unlisted

Steps

  • script

    // get your input selected text, and store range for later
    const selection = editor.getSelectedText()
    const [st, len] = editor.getSelectedRange()
    
    // 1. DEFINITIONS
    // We use v1beta because gemini-3-pro-preview is not yet in v1 (stable)
    const model = "gemini-3-pro-preview"
    const apiKey = "YOUT_API_KEY" // OR use Credential object below if you have one saved
    //const credential = Credential.create("Google Gemini", "Google AI API Key");
    //const apiKey = credential.getValue("password");
    
    let f = () => {
    	let instruction = `Revise the following text so it is concise, clear, and informative, suitable for inclusion in a psychological report.
    
    Tone and Style:
    	•	Semi-formal and professional
    	•	Follow Canadian English spelling and conventions
    
    Requirements:
    	•	Preserve the abbreviation “MVA” exactly as written
    	•	Eliminate redundancy and use precise language
    	•	Prioritize readability and clarity for a professional audience
    
    Output:
    Provide the revised text only. Do not include explanations or commentary.
    
    Input:`
    
    	// 2. BUILD PROMPT
    	let chatPrompt = `${instruction} "${selection}"`
    
    	// 3. SETUP RAW HTTP REQUEST (Bypassing GoogleAI helper)
    	// This ensures we hit the 'v1beta' endpoint required for preview models
    	let http = HTTP.create();
    	
    	let response = http.request({
    		"url": `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`,
    		"method": "POST",
    		"data": {
    			"contents": [
    				{
    					"parts": [{"text": chatPrompt}]
    				}
    			]
    		},
    		"headers": {
    			"Content-Type": "application/json"
    		}
    	});
    
    	// 4. ERROR HANDLING
    	if (response.statusCode != 200) {
    		console.log("Error: " + response.statusCode);
    		console.log(response.responseText);
    		context.fail();
    		return false;
    	}
    
    	// 5. PARSE RESULT
    	let result = JSON.parse(response.responseText);
    	let answer = result.candidates[0].content.parts[0].text;
    
    	if (!answer || answer.length == 0) {
    		console.log("Gemini returned an empty response.")
    		return false
    	}
    	
    	// 6. UPDATE EDITOR
    	editor.setSelectedText(answer)
    	editor.setSelectedRange(st, answer.length)
    	return true
    }
    
    if (!f()) {
    	context.fail()
    }

Options

  • After Success Default
    Notification Info
    Log Level Info
Items available in the Drafts Directory are uploaded by community members. Use appropriate caution reviewing downloaded items before use.