Skip to content

Commit

Permalink
add: editor settings with prompt select generate system role
Browse files Browse the repository at this point in the history
  • Loading branch information
longy2k committed Feb 5, 2024
1 parent 385fb3a commit 6ac97d4
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 16 deletions.
2 changes: 1 addition & 1 deletion src/components/FetchModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ export async function ollamaFetchData(settings: BMOSettings, index: number) {

const messageBlock = targetBotMessage?.querySelector('.messageBlock');
const loadingEl = targetBotMessage?.querySelector("#loading");

if (messageBlock) {
if (loadingEl) {
targetBotMessage?.removeChild(loadingEl);
Expand Down
14 changes: 8 additions & 6 deletions src/components/FetchModelEditor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ export async function fetchOpenAIAPIEditor(settings: BMOSettings, selectionStrin
dangerouslyAllowBrowser: true, // apiKey is stored within data.json
});

console.log(settings.system_role_prompt_select_generate);

const completion = await openai.chat.completions.create({
model: settings.model,
max_tokens: parseInt(settings.max_tokens),
messages: [
{ role: 'system', content: settings.system_role},
{ role: 'system', content: settings.system_role_prompt_select_generate},
{ role: 'user', content: selectionString}
],
});
Expand All @@ -35,7 +37,7 @@ export async function fetchOpenAIBaseAPIEditor(settings: BMOSettings, selectionS
model: settings.model,
max_tokens: parseInt(settings.max_tokens),
messages: [
{ role: 'system', content: settings.system_role },
{ role: 'system', content: settings.system_role_prompt_select_generate },
{ role: 'user', content: selectionString}
],
});
Expand All @@ -53,7 +55,7 @@ export async function ollamaFetchDataEditor(settings: BMOSettings, selectionStri
if (!ollamaRestAPIUrl) {
return;
}

try {
const response = await requestUrl({
url: ollamaRestAPIUrl + '/api/chat',
Expand All @@ -64,7 +66,7 @@ export async function ollamaFetchDataEditor(settings: BMOSettings, selectionStri
body: JSON.stringify({
model: settings.model,
messages: [
{ role: 'system', content: settings.system_role },
{ role: 'system', content: settings.system_role_prompt_select_generate },
{ role: 'user', content: selectionString}
],
stream: false,
Expand Down Expand Up @@ -107,7 +109,7 @@ export async function openAIRestAPIFetchDataEditor(settings: BMOSettings, select
body: JSON.stringify({
model: settings.model,
messages: [
{ role: 'system', content: settings.system_role },
{ role: 'system', content: settings.system_role_prompt_select_generate },
{ role: 'user', content: selectionString}
],
max_tokens: parseInt(settings.max_tokens),
Expand Down Expand Up @@ -140,7 +142,7 @@ export async function requestUrlAnthropicAPIEditor(settings: BMOSettings, select

const requestBody = {
model: settings.model,
prompt: `\n\nHuman: ${settings.system_role}\n\n${selectionString}\n\nAssistant:`,
prompt: `\n\nHuman: ${settings.system_role_prompt_select_generate}\n\n${selectionString}\n\nAssistant:`,
max_tokens_to_sample: parseInt(settings.max_tokens) || 100000,
temperature: settings.temperature,
stream: false,
Expand Down
13 changes: 6 additions & 7 deletions src/components/editor/FetchRenameNoteTitle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@ import { Notice, requestUrl } from "obsidian";
import OpenAI from "openai";
import { BMOSettings } from "src/main";
import { ANTHROPIC_MODELS, OPENAI_MODELS } from "src/view";
import { getActiveFileContent, getCurrentNoteContent } from "./ReferenceCurrentNote";
// import { getActiveFileContent, getCurrentNoteContent } from "./ReferenceCurrentNote";

// Rename note title based on specified model
export async function fetchModelRenameTitle(settings: BMOSettings) {
await getActiveFileContent(settings);
const referenceCurrentNoteContent = getCurrentNoteContent();
export async function fetchModelRenameTitle(settings: BMOSettings, referenceCurrentNoteContent: string) {
const clearYamlContent = referenceCurrentNoteContent.replace(/---[\s\S]+?---/, '').trim();

const prompt = `You are a title generator. You will give succinct titles that does not contain backslashes,
forward slashes, or colons. Please generate one title as your response.\n\n`;
Expand All @@ -25,7 +24,7 @@ export async function fetchModelRenameTitle(settings: BMOSettings) {
model: settings.model,
max_tokens: 40,
messages: [
{ role: 'system', content: prompt + referenceCurrentNoteContent},
{ role: 'system', content: prompt + clearYamlContent},
],
});

Expand Down Expand Up @@ -91,7 +90,7 @@ export async function fetchModelRenameTitle(settings: BMOSettings) {
const url = settings.ollamaRestAPIUrl + '/api/generate';

const requestBody = {
prompt: prompt + '\n\n' + referenceCurrentNoteContent + '\n\n',
prompt: prompt + '\n\n' + clearYamlContent + '\n\n',
model: settings.model,
stream: false,
options: {
Expand Down Expand Up @@ -131,7 +130,7 @@ export async function fetchModelRenameTitle(settings: BMOSettings) {
body: JSON.stringify({
model: settings.model,
messages: [
{ role: 'system', content: prompt + referenceCurrentNoteContent},
{ role: 'system', content: prompt + clearYamlContent},
],
max_tokens: 40,
temperature: settings.temperature,
Expand Down
46 changes: 46 additions & 0 deletions src/components/settings/EditorSettings.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { Setting, SettingTab, setIcon } from "obsidian";
import BMOGPT, { DEFAULT_SETTINGS } from "src/main";
import { addDescriptionLink } from "src/utils/DescriptionLink";


export async function addEditorSettings(containerEl: HTMLElement, plugin: BMOGPT, SettingTab: SettingTab) {
const toggleSettingContainer = containerEl.createDiv({ cls: 'toggleSettingContainer' });
toggleSettingContainer.createEl('h2', {text: 'Editor'});

const initialState = plugin.settings.toggleEditorSettings;
const chevronIcon = toggleSettingContainer.createEl('span', { cls: 'chevron-icon' });
setIcon(chevronIcon, initialState ? 'chevron-down' : 'chevron-right');

// Create the settings container to be toggled
const settingsContainer = containerEl.createDiv({ cls: 'settingsContainer' });
settingsContainer.style.display = initialState ? 'block' : 'none';

// Toggle visibility
toggleSettingContainer.addEventListener('click', async () => {
const isOpen = settingsContainer.style.display !== 'none';
if (isOpen) {
setIcon(chevronIcon, 'chevron-right'); // Close state
settingsContainer.style.display = 'none';
plugin.settings.toggleEditorSettings = false;

} else {
setIcon(chevronIcon, 'chevron-down'); // Open state
settingsContainer.style.display = 'block';
plugin.settings.toggleEditorSettings = true;
}
await plugin.saveSettings();
});

new Setting(settingsContainer)
.setName('Prompt Select Generate System')
.setDesc(addDescriptionLink('System role for Prompt Select Generate.', 'https://github.com/longy2k/obsidian-bmo-chatbot/wiki/Prompt---Select---Generate-Command', '', '[Instructions]'))
.addTextArea(text => text
.setPlaceholder('You are a helpful assistant.')
.setValue(plugin.settings.system_role_prompt_select_generate !== undefined ? plugin.settings.system_role_prompt_select_generate : DEFAULT_SETTINGS.system_role_prompt_select_generate)
.onChange(async (value) => {
plugin.settings.system_role_prompt_select_generate = value !== undefined ? value : DEFAULT_SETTINGS.system_role_prompt_select_generate;
await plugin.saveSettings();
})
);

}
2 changes: 1 addition & 1 deletion src/components/settings/GeneralSettings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ export async function addGeneralSettings(containerEl: HTMLElement, plugin: BMOGP
.setDesc('System role prompt.')
.addTextArea(text => text
.setPlaceholder('You are a helpful assistant.')
.setValue(plugin.settings.system_role !== undefined ? plugin.settings.system_role : "You are a helpful assistant who responds in markdown.")
.setValue(plugin.settings.system_role !== undefined ? plugin.settings.system_role : DEFAULT_SETTINGS.system_role)
.onChange(async (value) => {
plugin.settings.system_role = value !== undefined ? value : DEFAULT_SETTINGS.system_role;
await plugin.saveSettings();
Expand Down
4 changes: 4 additions & 0 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export interface BMOSettings {
templateFilePath: string;
promptFolderPath: string;
prompt: string;
system_role_prompt_select_generate: string;
openAIBaseUrl: string;
ollamaRestAPIUrl: string;
allowOllamaStream: boolean;
Expand All @@ -32,6 +33,7 @@ export interface BMOSettings {
allowHeader: boolean;
toggleGeneralSettings: boolean;
toggleAppearanceSettings: boolean;
toggleEditorSettings: boolean;
toggleChatHistorySettings: boolean;
togglePromptSettings: boolean;
toggleAPIConnectionSettings: boolean;
Expand Down Expand Up @@ -71,6 +73,7 @@ export const DEFAULT_SETTINGS: BMOSettings = {
templateFilePath: '',
promptFolderPath: '',
prompt: '',
system_role_prompt_select_generate: 'You are a helpful assistant who responds in markdown.',
openAIBaseUrl: 'https://api.openai.com/v1',
ollamaRestAPIUrl: '',
allowOllamaStream: false,
Expand All @@ -85,6 +88,7 @@ export const DEFAULT_SETTINGS: BMOSettings = {
allowHeader: true,
toggleGeneralSettings: true,
toggleAppearanceSettings: false,
toggleEditorSettings: false,
toggleChatHistorySettings: false,
togglePromptSettings: false,
toggleAPIConnectionSettings: true,
Expand Down
6 changes: 5 additions & 1 deletion src/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { addOllamaSettings } from './components/settings/OllamaSettings';
import { addAPIConnectionSettings } from './components/settings/ConnectionSettings';
import { addPromptSettings } from './components/settings/PromptSettings';
import { addOpenAIRestAPIUrlSettings } from './components/settings/OpenAIRestAPISettings';
import { addEditorSettings } from './components/settings/EditorSettings';

export class BMOSettingTab extends PluginSettingTab {
plugin: BMOGPT;
Expand Down Expand Up @@ -34,12 +35,15 @@ export class BMOSettingTab extends PluginSettingTab {

// Display settings
addGeneralSettings(this.containerEl, this.plugin, this);
addAppearanceSettings(this.containerEl, this.plugin, this);
addAppearanceSettings(this.containerEl, this.plugin, this);
addEditorSettings(this.containerEl, this.plugin, this);
addChatHistorySettings(this.containerEl, this.plugin, this);
addPromptSettings(this.containerEl, this.plugin, this);

const separator = document.createElement('hr');
separator.style.margin = `1rem 0`;
this.containerEl.appendChild(separator);

addAPIConnectionSettings(this.containerEl, this.plugin, this);
addOpenAIRestAPIUrlSettings(this.containerEl, this.plugin, this);
addOllamaSettings(this.containerEl, this.plugin, this);
Expand Down

0 comments on commit 6ac97d4

Please sign in to comment.