Skip to content

Commit 1de20bc

Browse files
author
nickchecan
committed
chore: set available models for ollama endpoint
1 parent 9c2708b commit 1de20bc

File tree

3 files changed

+90
-21
lines changed

3 files changed

+90
-21
lines changed

com.developer.nefarious.zjoule.plugin/src/com/developer/nefarious/zjoule/plugin/login/OllamaLoginWizard.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,35 @@
33
import org.eclipse.jface.wizard.Wizard;
44
import org.eclipse.swt.browser.Browser;
55

6+
import com.developer.nefarious.zjoule.plugin.login.api.IOllamaLoginClient;
7+
import com.developer.nefarious.zjoule.plugin.login.api.OllamaLoginClient;
8+
import com.developer.nefarious.zjoule.plugin.login.api.OllamaLoginClientHelper;
9+
import com.developer.nefarious.zjoule.plugin.login.memory.TemporaryMemoryOllamaEndpoint;
610
import com.developer.nefarious.zjoule.plugin.login.pages.FirstOllamaLoginPage;
711
import com.developer.nefarious.zjoule.plugin.login.pages.SecondOllamaLoginPage;
812

913
public class OllamaLoginWizard extends Wizard {
1014

1115
private Browser browser;
1216

17+
private IOllamaLoginClient ollamaLoginClient;
18+
1319
public OllamaLoginWizard(final Browser browser) {
1420
this.browser = browser;
1521

1622
setWindowTitle("Login to Ollama");
23+
ollamaLoginClient = new OllamaLoginClient(new OllamaLoginClientHelper());
1724
}
1825

1926
@Override
2027
public void addPages() {
21-
addPage(new FirstOllamaLoginPage());
28+
addPage(new FirstOllamaLoginPage(ollamaLoginClient));
2229
addPage(new SecondOllamaLoginPage());
2330
}
2431

2532
@Override
2633
public boolean performFinish() {
27-
// TemporaryMemoryOllamaConfig.getInstance().persist();
34+
TemporaryMemoryOllamaEndpoint.getInstance().persist();
2835

2936
// SessionManager.login(browser);
3037
return true;
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.developer.nefarious.zjoule.plugin.login.pages;
22

3+
import java.io.IOException;
4+
import java.util.List;
5+
36
import org.eclipse.jface.wizard.IWizardPage;
47
import org.eclipse.jface.wizard.WizardPage;
58
import org.eclipse.swt.SWT;
@@ -9,20 +12,27 @@
912
import org.eclipse.swt.widgets.Label;
1013
import org.eclipse.swt.widgets.Text;
1114

15+
import com.developer.nefarious.zjoule.plugin.login.api.GetOllamaModelsResponse;
16+
import com.developer.nefarious.zjoule.plugin.login.api.IOllamaLoginClient;
17+
import com.developer.nefarious.zjoule.plugin.login.utils.OllamaModelNamesExtractor;
18+
1219
public class FirstOllamaLoginPage extends WizardPage {
1320

1421
public static final String PAGE_ID = "Ollama Login First Page";
1522

23+
private IOllamaLoginClient ollamaLoginClient;
24+
1625
private Text endpointText;
17-
26+
1827
private Text errorText;
1928

20-
public FirstOllamaLoginPage() {
29+
public FirstOllamaLoginPage(final IOllamaLoginClient ollamaLoginClient) {
2130
super(PAGE_ID);
2231

2332
setTitle("Ollama Setup");
2433
setDescription("Enter the host and port for the local Ollama instance.");
2534
setPageComplete(false); // Initially set the page as incomplete
35+
this.ollamaLoginClient = ollamaLoginClient;
2636
}
2737

2838
@Override
@@ -36,39 +46,53 @@ public void createControl(final Composite parent) {
3646
endpointText = new Text(container, SWT.BORDER);
3747
endpointText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
3848
endpointText.setText("http://localhost:11434");
39-
49+
4050
// Hidden error text widget
41-
errorText = new Text(container, SWT.READ_ONLY | SWT.MULTI | SWT.WRAP);
42-
GridData errorTextGridData = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
43-
errorText.setLayoutData(errorTextGridData);
44-
errorText.setForeground(container.getDisplay().getSystemColor(SWT.COLOR_RED));
45-
errorText.setVisible(false); // Initially hidden
51+
errorText = new Text(container, SWT.READ_ONLY | SWT.MULTI | SWT.WRAP);
52+
GridData errorTextGridData = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
53+
errorText.setLayoutData(errorTextGridData);
54+
errorText.setForeground(container.getDisplay().getSystemColor(SWT.COLOR_RED));
55+
errorText.setVisible(false); // Initially hidden
4656

4757
setControl(container);
4858
}
49-
59+
5060
@Override
51-
public boolean canFlipToNextPage() {
52-
return true;
53-
}
61+
public boolean canFlipToNextPage() {
62+
return true;
63+
}
5464

5565
@Override
5666
public IWizardPage getNextPage() {
57-
58-
String input = endpointText.getText();
59-
60-
if (input == null || input.isEmpty() || input.isBlank()) {
67+
68+
String ollamaEndpoint = endpointText.getText();
69+
70+
if (ollamaEndpoint == null || ollamaEndpoint.isEmpty() || ollamaEndpoint.isBlank()) {
6171
displayErrorMessage("Please, enter a local Ollama endpoint to proceed.");
6272
return null;
6373
}
64-
74+
75+
try {
76+
setAvailableModelsFor(ollamaEndpoint);
77+
} catch (IllegalArgumentException | IOException | InterruptedException e) {
78+
displayErrorMessage("Local instance of Ollama invalid or doesn't exist in the informed address.");
79+
return null;
80+
}
81+
6582
errorText.setVisible(false);
6683
return super.getNextPage(); // Proceed to the next page
6784
}
68-
85+
86+
private void setAvailableModelsFor(final String ollamaEndpoint) throws IOException, InterruptedException {
87+
GetOllamaModelsResponse response = ollamaLoginClient.getModels(ollamaEndpoint);
88+
SecondOllamaLoginPage secondPage = (SecondOllamaLoginPage) getWizard().getPage(SecondOllamaLoginPage.PAGE_ID);
89+
List<String> modelsAvailableForSelection = OllamaModelNamesExtractor.extractModelNames(response);
90+
secondPage.setModelsForSelection(modelsAvailableForSelection);
91+
}
92+
6993
private void displayErrorMessage(final String message) {
7094
errorText.setText(message);
71-
errorText.setVisible(true);
95+
errorText.setVisible(true);
7296
}
7397

7498
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.developer.nefarious.zjoule.plugin.login.utils;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import com.developer.nefarious.zjoule.plugin.login.api.GetOllamaModelsResponse;
7+
import com.developer.nefarious.zjoule.plugin.models.OllamaModel;
8+
9+
public abstract class OllamaModelNamesExtractor {
10+
11+
public static List<String> extractModelNames(final GetOllamaModelsResponse response) {
12+
// Step 0: Check if response is null
13+
if (response == null) {
14+
return null;
15+
}
16+
17+
// Step 1: Get the list of Model objects from the response
18+
List<OllamaModel> ollamaModels = response.getModels();
19+
20+
// Step 2: Create an ArrayList to store the model names
21+
List<String> ollamaModelNames = new ArrayList<>();
22+
23+
// Step 3 & 4: Loop through each Model and extract its name
24+
for (OllamaModel ollamaModel : ollamaModels) {
25+
String ollamaModelName = ollamaModel.getName();
26+
ollamaModelNames.add(ollamaModelName);
27+
}
28+
29+
// Return the list of model names
30+
return ollamaModelNames;
31+
}
32+
33+
/**
34+
* Private constructor to prevent instantiation of this utility class.
35+
*/
36+
private OllamaModelNamesExtractor() { }
37+
38+
}

0 commit comments

Comments
 (0)