generated from obsidianmd/obsidian-sample-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
settings.ts
107 lines (89 loc) · 3.24 KB
/
settings.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import CanvasAiPlugin from "main";
import { PluginSettingTab, App, Setting } from "obsidian";
const LARGE_LANGUAGE_MODELS = {
'deepseek-chat': 'deepseek-chat',
'deepseek-coder': 'deepseek-coder'
}
export interface CanvasAiPluginSettings {
apiKey: string;
llm: string;
customInstructions: string;
}
export const DEFAULT_SETTINGS: Partial<CanvasAiPluginSettings> = {
apiKey: '',
llm: Object.keys(LARGE_LANGUAGE_MODELS).first()
}
export class CanvasAiSettingTab extends PluginSettingTab {
settingsManager: SettingsManager
constructor(plugin: CanvasAiPlugin, settingsManager: SettingsManager) {
super(plugin.app, plugin)
this.settingsManager = settingsManager
}
display(): void {
const { containerEl } = this;
containerEl.empty();
// API key输入框
new Setting(containerEl)
.setName('API keys')
.setDesc('It\'s a secret')
.addText(text => text
.setPlaceholder('Enter your API keys')
.setValue(this.settingsManager.getSetting("apiKey"))
.onChange(async (value) => {
await this.settingsManager.setSetting({ apiKey: value });
}));
// 大语言模型选择框
new Setting(containerEl)
.setName('Large language model')
.setDesc('Choose a model')
.addDropdown((dropdown) => {
dropdown
.addOptions(LARGE_LANGUAGE_MODELS)
.setValue(this.settingsManager.getSetting("llm"))
.onChange(async (value) => await this.settingsManager.setSetting({ llm: value }))
})
// 个性化指令
new Setting(containerEl)
.setName('Custom instructions')
.setDesc('Instructions to the AI')
.addTextArea(text => text
.setPlaceholder('Enter your custom instructions')
.setValue(this.settingsManager.getSetting('customInstructions'))
.onChange(async (value) => {
console.log(text);
await this.settingsManager.setSetting({ customInstructions: value });
})
.inputEl.setAttribute("style", "margin-top: 12px; width: 100%; height: 20vh;")
)
.settingEl.setAttribute("style", "display: grid; grid-template-columns: 1fr;");
}
}
export default class SettingsManager {
static SETTINGS_CHANGED_EVENT = 'canvas-ai:settings-changed'
private plugin: CanvasAiPlugin
private settings: CanvasAiPluginSettings
private settingsTab: CanvasAiSettingTab
constructor(plugin: CanvasAiPlugin) {
this.plugin = plugin
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.plugin.loadData());
this.plugin.app.workspace.trigger(SettingsManager.SETTINGS_CHANGED_EVENT)
}
async saveSettings() {
await this.plugin.saveData(this.settings)
}
getSetting<T extends keyof CanvasAiPluginSettings>(key: T): CanvasAiPluginSettings[T] {
return this.settings[key]
}
async setSetting(data: Partial<CanvasAiPluginSettings>) {
this.settings = Object.assign(this.settings, data)
await this.saveSettings()
this.plugin.app.workspace.trigger(SettingsManager.SETTINGS_CHANGED_EVENT)
}
// This adds a settings tab so the user can configure various aspects of the plugin
addSettingsTab() {
this.settingsTab = new CanvasAiSettingTab(this.plugin, this)
this.plugin.addSettingTab(this.settingsTab)
}
}