aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--index.ts117
1 files changed, 84 insertions, 33 deletions
diff --git a/index.ts b/index.ts
index a6ec1b1..dd3748d 100644
--- a/index.ts
+++ b/index.ts
@@ -1,63 +1,91 @@
import '@logseq/libs'
-import { LSPluginBaseInfo } from '@logseq/libs/dist/libs'
+import { LSPluginBaseInfo } from '@logseq/libs/dist/LSPlugin'
+import { SettingSchemaDesc } from '@logseq/libs/dist/LSPlugin';
const delay = (t = 100) => new Promise(r => setTimeout(r, t))
-async function loadRedditData () {
- const endpoint = 'https://www.reddit.com/r/logseq/hot.json'
+let settings: SettingSchemaDesc[] = [
+ {
+ key: "host",
+ type: "string",
+ title: "Host",
+ description: "Set the host of your ollama model",
+ default: "localhost:11434"
+ },
+ {
+ key: "model",
+ type: "string",
+ title: "LLM Model",
+ description: "Set your desired model to use ollama",
+ default: "mistral:instruct"
+ },
+]
+
+async function promptLLM(url: string, prompt: string, model: string) {
+ const response = await fetch('http://localhost:11434/api/generate', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ model: model,
+ prompt: prompt,
+ stream: false,
+ }),
+ })
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
- const { data: { children } } = await fetch(endpoint).then(res => res.json())
- const ret = children || []
+ const data = await response.json();
- return ret.map(({ data }, i) => {
- const { title, selftext, url, ups, downs, num_comments } = data
+ return data.response;
- return `${i}. [${title}](${url}) [:small.opacity-50 "🔥 ${ups} 💬 ${num_comments}"]
-collapsed:: true
-> ${selftext}`
- })
}
/**
* main entry
* @param baseInfo
*/
-function main (baseInfo: LSPluginBaseInfo) {
+function main(baseInfo: LSPluginBaseInfo) {
+ logseq.useSettingsSchema(settings)
let loading = false
logseq.provideModel({
- async loadReddits () {
+ async summarize() {
const info = await logseq.App.getUserConfigs()
if (loading) return
- const pageName = 'reddit-logseq-hots-news'
- const blockTitle = (new Date()).toLocaleString()
-
- logseq.App.pushState('page', { name: pageName })
await delay(300)
loading = true
- try {
- const currentPage = await logseq.Editor.getCurrentPage()
- if (currentPage?.originalName !== pageName) throw new Error('page error')
-
- const pageBlocksTree = await logseq.Editor.getCurrentPageBlocksTree()
- let targetBlock = pageBlocksTree[0]!
-
- targetBlock = await logseq.Editor.insertBlock(targetBlock.uuid, '🚀 Fetching r/logseq ...', { before: true })
- let blocks = await loadRedditData()
+ logseq.App.showMsg(`
+ [:div.p-2
+ [:h1 "response"]
+ [:h2.text-xl "Hello"]]
+ `)
- blocks = blocks.map(it => ({ content: it }))
-
- await logseq.Editor.insertBatchBlock(targetBlock.uuid, blocks, {
- sibling: false
- })
+ try {
+ const currentSelectedBlocks = await logseq.Editor.getCurrentPageBlocksTree()
+ let blocksContent = ""
+ if (currentSelectedBlocks) {
+ let lastBlock: any = currentSelectedBlocks[currentSelectedBlocks.length - 1]
+ for (const block of currentSelectedBlocks) {
+ blocksContent += block.content + "/n"
+ }
+ if (lastBlock) {
+ lastBlock = await logseq.Editor.insertBlock(lastBlock.uuid, '🚀 Summarizing....', { before: false })
+ }
+
+ const summary = await promptLLM(logseq.settings.host, `Summarize the following ${blocksContent}`, logseq.settings.model)
+
+ await logseq.Editor.updateBlock(lastBlock.uuid, `Summary: ${summary}`)
+ }
- await logseq.Editor.updateBlock(targetBlock.uuid, `## 🔖 r/logseq - ${blockTitle}`)
} catch (e) {
logseq.App.showMsg(e.toString(), 'warning')
console.error(e)
@@ -67,10 +95,33 @@ function main (baseInfo: LSPluginBaseInfo) {
}
})
+
+ logseq.Editor.registerBlockContextMenuItem('Summarize with AI',
+ async () => {
+ logseq.App.showMsg(
+ 'Summarizing....'
+ );
+ const currentSelectedBlocks = await logseq.Editor.getCurrentPageBlocksTree()
+ let blocksContent = ""
+ if (currentSelectedBlocks != undefined) {
+ let lastBlock: any = currentSelectedBlocks[currentSelectedBlocks.length - 1]
+ for (const block in currentSelectedBlocks) {
+ blocksContent += currentSelectedBlocks[block].content + "/n"
+ }
+ if (lastBlock) {
+ lastBlock = await logseq.Editor.insertBlock(lastBlock.uuid, '🚀 Summarizing....', { before: false })
+ }
+
+ const summary = await promptLLM(logseq.settings.host, `Summarize the following ${blocksContent}`, logseq.settings.model)
+
+ await logseq.Editor.updateBlock(lastBlock.uuid, `Summary: ${summary}`)
+ }
+ })
+
logseq.App.registerUIItem('toolbar', {
key: 'logseq-reddit',
template: `
- <a data-on-click="loadReddits"
+ <a data-on-click="summarize"
class="button">
<i class="ti ti-brand-reddit"></i>
</a>