Skip to content

Commit

Permalink
Add Edit>Options>OpenAI... for setting the key
Browse files Browse the repository at this point in the history
  • Loading branch information
ctrueden committed Nov 7, 2023
1 parent 0047719 commit dd18ea4
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 1 deletion.
54 changes: 54 additions & 0 deletions src/main/java/org/scijava/ui/swing/script/OpenAIOptions.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* #%L
* Script Editor and Interpreter for SciJava script languages.
* %%
* Copyright (C) 2009 - 2023 SciJava developers.
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* #L%
*/

package org.scijava.ui.swing.script;

import org.scijava.options.OptionsPlugin;
import org.scijava.plugin.Parameter;
import org.scijava.plugin.Plugin;

/**
* Runs the Edit::Options::OpenAI dialog.
*
* @author Curtis Rueden
*/
@Plugin(type = OptionsPlugin.class, menuPath = "Edit>Options>OpenAI...")
public class OpenAIOptions extends OptionsPlugin {

@Parameter(label = "OpenAI key")
private String openAIKey;

public String getOpenAIKey() {
return openAIKey;
}

public void setOpenAIKey(final String openAIKey) {
this.openAIKey = openAIKey;
}
}
17 changes: 16 additions & 1 deletion src/main/java/org/scijava/ui/swing/script/TextEditor.java
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@
import org.scijava.log.LogService;
import org.scijava.module.ModuleException;
import org.scijava.module.ModuleService;
import org.scijava.options.OptionsService;
import org.scijava.platform.PlatformService;
import org.scijava.plugin.Parameter;
import org.scijava.plugin.PluginInfo;
Expand Down Expand Up @@ -276,6 +277,8 @@ public class TextEditor extends JFrame implements ActionListener,
private AppService appService;
@Parameter
private BatchService batchService;
@Parameter(required = false)
private OptionsService optionsService;

private Map<ScriptLanguage, JRadioButtonMenuItem> languageMenuItems;
private JRadioButtonMenuItem noneLanguageItem;
Expand Down Expand Up @@ -3276,7 +3279,7 @@ public void askChatGPTtoGenerateCode() {

private String askChatGPT(String text) {
// Modified from: https://github.com/TheoKanning/openai-java/blob/main/example/src/main/java/example/OpenAiApiFunctionsExample.java
String token = System.getenv("OPENAI_API_KEY");
String token = apiKey();

OpenAiService service = new OpenAiService(token);

Expand All @@ -3297,6 +3300,18 @@ private String askChatGPT(String text) {
return result;
}

private String apiKey() {
if (optionsService != null) {
final OpenAIOptions openAIOptions =
optionsService.getOptions(OpenAIOptions.class);
if (openAIOptions != null) {
final String key = openAIOptions.getOpenAIKey();
if (key != null && !key.isEmpty()) return key;
}
}
return System.getenv("OPENAI_API_KEY");
}

public void extractSourceJar(final File file) {
try {
final FileFunctions functions = new FileFunctions(this);
Expand Down

0 comments on commit dd18ea4

Please sign in to comment.