feat: Add Chrome AI support

This commit is contained in:
n4ze3m
2024-06-30 20:45:06 +05:30
parent 52f9a2953a
commit d41ec2a89c
36 changed files with 463 additions and 47 deletions

38
src/services/chrome.ts Normal file
View File

@@ -0,0 +1,38 @@
import { Storage } from "@plasmohq/storage"
const storage = new Storage()
const DEFAULT_CHROME_AI_MODEL = {
name: "Gemini Nano",
model: "chrome::gemini-nano::page-assist",
modified_at: "",
provider: "chrome",
size: 0,
digest: "",
details: {
parent_model: "",
format: "",
family: "",
families: [],
parameter_size: "",
quantization_level: ""
}
}
export const getChromeAIStatus = async (): Promise<boolean> => {
const aiStatus = await storage.get<boolean | undefined>("chromeAIStatus")
return aiStatus ?? false
}
export const setChromeAIStatus = async (status: boolean): Promise<void> => {
await storage.set("chromeAIStatus", status)
}
export const getChromeAIModel = async () => {
const isEnable = await getChromeAIStatus()
if (isEnable) {
return [DEFAULT_CHROME_AI_MODEL]
} else {
return []
}
}

View File

@@ -1,6 +1,7 @@
import { Storage } from "@plasmohq/storage"
import { cleanUrl } from "../libs/clean-url"
import { urlRewriteRuntime } from "../libs/runtime"
import { getChromeAIModel } from "./chrome"
const storage = new Storage()
@@ -144,6 +145,7 @@ export const deleteModel = async (model: string) => {
return response.json()
}
export const fetchChatModels = async ({
returnEmpty = false
}: {
@@ -174,15 +176,39 @@ export const fetchChatModels = async ({
quantization_level: string
}
}[]
return models?.filter((model) => {
return (
!model?.details?.families?.includes("bert") &&
!model?.details?.families?.includes("nomic-bert")
)
})
const chatModels = models
?.filter((model) => {
return (
!model?.details?.families?.includes("bert") &&
!model?.details?.families?.includes("nomic-bert")
)
})
.map((model) => {
return {
...model,
provider: "ollama"
}
})
const chromeModel = await getChromeAIModel()
return [
...chatModels,
...chromeModel
]
} catch (e) {
console.error(e)
return await getAllModels({ returnEmpty })
const allModels = await getAllModels({ returnEmpty })
const models = allModels.map((model) => {
return {
...model,
provider: "ollama"
}
})
const chromeModel = await getChromeAIModel()
return [
...models,
...chromeModel
]
}
}
@@ -345,4 +371,3 @@ export const getPageShareUrl = async () => {
export const setPageShareUrl = async (pageShareUrl: string) => {
await storage.set("pageShareUrl", pageShareUrl)
}