Skip to content

Commit de840f2

Browse files
author
nickchecan
committed
chore: store endpoint and model for ollama on memory
1 parent 5a57b78 commit de840f2

File tree

6 files changed

+139
-23
lines changed

6 files changed

+139
-23
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.developer.nefarious.zjoule.plugin.login.api.OllamaLoginClient;
88
import com.developer.nefarious.zjoule.plugin.login.api.OllamaLoginClientHelper;
99
import com.developer.nefarious.zjoule.plugin.login.memory.TemporaryMemoryOllamaEndpoint;
10+
import com.developer.nefarious.zjoule.plugin.login.memory.TemporaryMemoryOllamaModel;
1011
import com.developer.nefarious.zjoule.plugin.login.pages.FirstOllamaLoginWizardPage;
1112
import com.developer.nefarious.zjoule.plugin.login.pages.SecondOllamaLoginWizardPage;
1213

@@ -25,13 +26,14 @@ public OllamaLoginWizard(final Browser browser) {
2526

2627
@Override
2728
public void addPages() {
28-
addPage(new FirstOllamaLoginWizardPage(ollamaLoginClient));
29-
addPage(new SecondOllamaLoginWizardPage());
29+
addPage(new FirstOllamaLoginWizardPage(ollamaLoginClient, TemporaryMemoryOllamaEndpoint.getInstance()));
30+
addPage(new SecondOllamaLoginWizardPage(TemporaryMemoryOllamaModel.getInstance()));
3031
}
3132

3233
@Override
3334
public boolean performFinish() {
3435
TemporaryMemoryOllamaEndpoint.getInstance().persist();
36+
TemporaryMemoryOllamaModel.getInstance().persist();
3537

3638
// SessionManager.login(browser);
3739
return true;

com.developer.nefarious.zjoule.plugin/src/com/developer/nefarious/zjoule/plugin/login/events/OllamaModelSelectionAdapter.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.developer.nefarious.zjoule.plugin.login.events;
22

3+
import java.util.List;
4+
35
import org.eclipse.swt.events.SelectionAdapter;
46
import org.eclipse.swt.events.SelectionEvent;
57

@@ -13,15 +15,33 @@ public class OllamaModelSelectionAdapter extends SelectionAdapter {
1315

1416
private IMemoryObject<OllamaModel> memoryOllamaModel;
1517

18+
// @formatter:off
1619
public OllamaModelSelectionAdapter(
1720
final SecondOllamaLoginWizardPage secondOllamaLoginWizardPage,
1821
final IMemoryObject<OllamaModel> memoryOllamaModel) {
22+
// @formatter:on
1923
this.secondOllamaLoginWizardPage = secondOllamaLoginWizardPage;
2024
this.memoryOllamaModel = memoryOllamaModel;
2125
}
2226

27+
private OllamaModel getSelectedOllamaModelObject(final String selectedOllamaModelName) {
28+
List<OllamaModel> ollamaModelForSelection = secondOllamaLoginWizardPage.getOllamaModelsForSelection();
29+
30+
return ollamaModelForSelection.stream()
31+
.filter(ollamaModel -> selectedOllamaModelName.equals(ollamaModel.getName()))
32+
.findFirst()
33+
.orElse(null);
34+
}
35+
2336
@Override
2437
public void widgetSelected(final SelectionEvent e) {
25-
38+
String selectedOllamaModelName = secondOllamaLoginWizardPage.getOllamaModelDropdown().getText();
39+
if (selectedOllamaModelName.isEmpty()) {
40+
secondOllamaLoginWizardPage.setPageComplete(false);
41+
} else {
42+
OllamaModel selectedOllamaModelObject = getSelectedOllamaModelObject(selectedOllamaModelName);
43+
memoryOllamaModel.save(selectedOllamaModelObject);
44+
secondOllamaLoginWizardPage.setPageComplete(true);
45+
}
2646
}
2747
}

com.developer.nefarious.zjoule.plugin/src/com/developer/nefarious/zjoule/plugin/login/pages/FirstOllamaLoginWizardPage.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.developer.nefarious.zjoule.plugin.login.pages;
22

33
import java.io.IOException;
4-
import java.util.List;
54

65
import org.eclipse.jface.wizard.IWizardPage;
76
import org.eclipse.jface.wizard.WizardPage;
@@ -14,25 +13,29 @@
1413

1514
import com.developer.nefarious.zjoule.plugin.login.api.GetOllamaModelsResponse;
1615
import com.developer.nefarious.zjoule.plugin.login.api.IOllamaLoginClient;
17-
import com.developer.nefarious.zjoule.plugin.login.utils.OllamaModelNamesExtractor;
16+
import com.developer.nefarious.zjoule.plugin.memory.IMemoryObject;
1817

1918
public class FirstOllamaLoginWizardPage extends WizardPage {
2019

2120
public static final String PAGE_ID = "Ollama Login First Page";
2221

2322
private IOllamaLoginClient ollamaLoginClient;
23+
24+
private IMemoryObject<String> memoryOllamaEndpoint;
2425

2526
private Text endpointText;
2627

2728
private Text errorText;
2829

29-
public FirstOllamaLoginWizardPage(final IOllamaLoginClient ollamaLoginClient) {
30+
public FirstOllamaLoginWizardPage(
31+
final IOllamaLoginClient ollamaLoginClient,
32+
final IMemoryObject<String> memoryOllamaEndpoint) {
3033
super(PAGE_ID);
31-
3234
setTitle("Ollama Setup");
3335
setDescription("Enter the host and port for the local Ollama instance.");
34-
setPageComplete(false); // Initially set the page as incomplete
36+
setPageComplete(true);
3537
this.ollamaLoginClient = ollamaLoginClient;
38+
this.memoryOllamaEndpoint = memoryOllamaEndpoint;
3639
}
3740

3841
@Override
@@ -78,16 +81,16 @@ public IWizardPage getNextPage() {
7881
displayErrorMessage("Local instance of Ollama invalid or doesn't exist in the informed address.");
7982
return null;
8083
}
81-
84+
8285
errorText.setVisible(false);
83-
return super.getNextPage(); // Proceed to the next page
86+
memoryOllamaEndpoint.save(ollamaEndpoint);
87+
return super.getNextPage(); // Proceed to the next wizard page
8488
}
8589

8690
private void setAvailableModelsFor(final String ollamaEndpoint) throws IOException, InterruptedException {
87-
GetOllamaModelsResponse response = ollamaLoginClient.getModels(ollamaEndpoint);
91+
GetOllamaModelsResponse getOllamaModelsResponse = ollamaLoginClient.getModels(ollamaEndpoint);
8892
SecondOllamaLoginWizardPage secondPage = (SecondOllamaLoginWizardPage) getWizard().getPage(SecondOllamaLoginWizardPage.PAGE_ID);
89-
List<String> modelsAvailableForSelection = OllamaModelNamesExtractor.extractModelNames(response);
90-
secondPage.setModelsForSelection(modelsAvailableForSelection);
93+
secondPage.setOllamaModelsForSelection(getOllamaModelsResponse);
9194
}
9295

9396
private void displayErrorMessage(final String message) {

com.developer.nefarious.zjoule.plugin/src/com/developer/nefarious/zjoule/plugin/login/pages/SecondOllamaLoginWizardPage.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,28 @@
1111
import org.eclipse.swt.widgets.Composite;
1212
import org.eclipse.swt.widgets.Label;
1313

14+
import com.developer.nefarious.zjoule.plugin.login.api.GetOllamaModelsResponse;
1415
import com.developer.nefarious.zjoule.plugin.login.events.OllamaModelSelectionAdapter;
16+
import com.developer.nefarious.zjoule.plugin.login.utils.OllamaModelNamesExtractor;
1517
import com.developer.nefarious.zjoule.plugin.memory.IMemoryObject;
1618
import com.developer.nefarious.zjoule.plugin.models.OllamaModel;
1719

1820
public class SecondOllamaLoginWizardPage extends WizardPage {
1921

2022
public static final String PAGE_ID = "Ollama Login Second Page";
2123

22-
private Combo modelDropdown;
24+
private Combo ollamaModelDropdown;
2325

24-
private List<String> modelsForSelection = new ArrayList<>();
26+
private List<OllamaModel> ollamaModelsForSelection = new ArrayList<>();
2527

2628
private IMemoryObject<OllamaModel> memoryOllamaModel;
2729

2830
public SecondOllamaLoginWizardPage(final IMemoryObject<OllamaModel> memoryOllamaModel) {
2931
super(PAGE_ID);
30-
3132
setTitle("Ollama Setup");
3233
setDescription("Select the Ollama model.");
3334
setPageComplete(false); // Initially set the page as incomplete
35+
this.memoryOllamaModel = memoryOllamaModel;
3436
}
3537

3638
@Override
@@ -41,16 +43,26 @@ public void createControl(final Composite parent) {
4143
Label modelLabel = new Label(container, SWT.NONE);
4244
modelLabel.setText("Select the Model:");
4345

44-
modelDropdown = new Combo(container, SWT.DROP_DOWN | SWT.READ_ONLY);
45-
modelDropdown.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
46+
ollamaModelDropdown = new Combo(container, SWT.DROP_DOWN | SWT.READ_ONLY);
47+
ollamaModelDropdown.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
4648

47-
modelDropdown.addSelectionListener(new OllamaModelSelectionAdapter(this, memoryOllamaModel));
49+
ollamaModelDropdown.addSelectionListener(new OllamaModelSelectionAdapter(this, memoryOllamaModel));
4850

4951
setControl(container);
5052
}
5153

52-
public void setModelsForSelection(final List<String> modelsForSelection) {
53-
modelDropdown.setItems(modelsForSelection.toArray(new String[0]));
54+
public List<OllamaModel> getOllamaModelsForSelection() {
55+
return ollamaModelsForSelection;
56+
}
57+
58+
public void setOllamaModelsForSelection(final GetOllamaModelsResponse getOllamaModelsResponse) {
59+
this.ollamaModelsForSelection = getOllamaModelsResponse.getModels();
60+
List<String> ollamaModelNames = OllamaModelNamesExtractor.extractModelNames(getOllamaModelsResponse);
61+
ollamaModelDropdown.setItems(ollamaModelNames.toArray(new String[0]));
5462
}
63+
64+
public Combo getOllamaModelDropdown() {
65+
return ollamaModelDropdown;
66+
}
5567

5668
}

com.developer.nefarious.zjoule.plugin/src/com/developer/nefarious/zjoule/plugin/login/pages/SecondSapLoginWizardPage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ public void createControl(final Composite parent) {
9696
resourceGroupDropdown.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
9797

9898
// Add a SelectionListener to enable the deployment dropdown when a valid resource group is selected
99-
resourceGroupDropdown
100-
.addSelectionListener(new ResourceGroupSelectionAdapter(this, sapLoginClient, memoryResourceGroup));
99+
resourceGroupDropdown.addSelectionListener(
100+
new ResourceGroupSelectionAdapter(this, sapLoginClient, memoryResourceGroup));
101101

102102
// Create label and dropdown for deployment ID selection
103103
Label deploymentLabel = new Label(container, SWT.NONE);
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,84 @@
11
package com.developer.nefarious.zjoule.test.login.events;
22

3+
import static org.mockito.Mockito.mock;
4+
import static org.mockito.Mockito.spy;
5+
import static org.mockito.Mockito.verify;
6+
import static org.mockito.Mockito.when;
7+
8+
import java.util.Arrays;
9+
import java.util.List;
10+
11+
import org.eclipse.swt.events.SelectionEvent;
12+
import org.eclipse.swt.widgets.Combo;
13+
import org.junit.jupiter.api.BeforeEach;
14+
import org.junit.jupiter.api.Test;
15+
import org.mockito.Mock;
16+
import org.mockito.MockitoAnnotations;
17+
18+
import com.developer.nefarious.zjoule.plugin.login.events.OllamaModelSelectionAdapter;
19+
import com.developer.nefarious.zjoule.plugin.login.pages.SecondOllamaLoginWizardPage;
20+
import com.developer.nefarious.zjoule.plugin.memory.IMemoryObject;
21+
import com.developer.nefarious.zjoule.plugin.models.OllamaModel;
22+
323
public class OllamaModelSelectionAdapterTest {
424

25+
private OllamaModelSelectionAdapter cut;
26+
27+
@Mock
28+
private SecondOllamaLoginWizardPage mockSecondOllamaLoginWizardPage;
29+
30+
@Mock
31+
private IMemoryObject<OllamaModel> mockMemoryOllamaModel;
32+
33+
@BeforeEach
34+
public void setUp() {
35+
MockitoAnnotations.openMocks(this);
36+
37+
cut = spy(new OllamaModelSelectionAdapter(mockSecondOllamaLoginWizardPage, mockMemoryOllamaModel));
38+
}
39+
40+
@Test
41+
public void shouldSetAsCompleteWhenThereIsText() {
42+
// Arrange
43+
SelectionEvent mockSelectionEvent = mock(SelectionEvent.class);
44+
45+
Combo mockOllamaModelDropdown = mock(Combo.class);
46+
when(mockSecondOllamaLoginWizardPage.getOllamaModelDropdown()).thenReturn(mockOllamaModelDropdown);
47+
String mockSelectedOllamaModelName = "Selected Ollama Model";
48+
when(mockOllamaModelDropdown.getText()).thenReturn(mockSelectedOllamaModelName);
49+
50+
OllamaModel ollamaModel1 = new OllamaModel();
51+
ollamaModel1.setName("Not this one");
52+
OllamaModel ollamaModel2 = new OllamaModel();
53+
ollamaModel2.setName(mockSelectedOllamaModelName);
54+
OllamaModel ollamaModel3 = new OllamaModel();
55+
ollamaModel3.setName("Note this one");
56+
List<OllamaModel> mockOllamaModelsForselection = Arrays.asList(ollamaModel1, ollamaModel2, ollamaModel3);
57+
when(mockSecondOllamaLoginWizardPage.getOllamaModelsForSelection()).thenReturn(mockOllamaModelsForselection);
58+
59+
// Act
60+
cut.widgetSelected(mockSelectionEvent);
61+
62+
// Assert
63+
verify(mockSecondOllamaLoginWizardPage).setPageComplete(true);
64+
verify(mockMemoryOllamaModel).save(ollamaModel2);
65+
}
66+
67+
@Test
68+
public void shouldSetAsIncompleteWhenThereIsNoText() {
69+
// Arrange
70+
SelectionEvent mockSelectionEvent = mock(SelectionEvent.class);
71+
72+
Combo mockOllamaModelDropdown = mock(Combo.class);
73+
when(mockSecondOllamaLoginWizardPage.getOllamaModelDropdown()).thenReturn(mockOllamaModelDropdown);
74+
String mockText = "";
75+
when(mockOllamaModelDropdown.getText()).thenReturn(mockText);
76+
77+
// Act
78+
cut.widgetSelected(mockSelectionEvent);
79+
80+
// Assert
81+
verify(mockSecondOllamaLoginWizardPage).setPageComplete(false);
82+
}
83+
584
}

0 commit comments

Comments
 (0)