-
Notifications
You must be signed in to change notification settings - Fork 1.7k
feature: @janhq/plugin-core module & usage #321
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
f4eb0f5
to
6679499
Compare
1777f68
to
1b94710
Compare
9a85f9e
to
8e6931a
Compare
3da9055
to
b16e179
Compare
namchuai
reviewed
Oct 13, 2023
139df30
to
bba4a4b
Compare
e270c73
to
0076894
Compare
e9b5ede
to
2b38618
Compare
namchuai
reviewed
Oct 13, 2023
namchuai
reviewed
Oct 13, 2023
namchuai
approved these changes
Oct 14, 2023
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💯
hiento09
approved these changes
Oct 14, 2023
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💯
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
For now, it is quite hard for developers to write a plugin, since they have to register functions using function name as string. It is not well documented yet.
Maintain an npm module so developer can install in a plugin project, import module to retrieve all needed interfaces, types
The module should expose:
Action Items:
Next phase:
==========
@janhq/plugin-core
Usage
Import the package
Register Plugin Extensions
Every plugin must define an
init
function in its main entry file to initialize the plugin and register its extensions with the Jan platform.You can
register
any function as a plugin extension usingCoreServiceAPI
below. For example, theDataService.GetConversations
entry name can be used to register a function that retrieves conversations.Once the extension is registered, it can be used by other plugins or components in the Jan platform. For example, a UI component might use the DataService.GetConversations extension to retrieve a list of conversations to display to the user.
Access Core API
To access the Core API in your plugin, you can follow the code examples and explanations provided below.
Import Core API and Store Module
In your main entry code (e.g.,
index.ts
), start by importing the necessary modules and functions from the@janhq/plugin-core
library.Interact with Local Data Storage
The Core API allows you to interact with local data storage. Here are a couple of examples of how you can use it:
Insert Data
You can use the store.insertOne function to insert data into a specific collection in the local data store.
Get Data
To retrieve data from a collection in the local data store, you can use the
store.findOne
orstore.findMany
function. It allows you to filter and retrieve documents based on specific criteria.store.getOne(collectionName, key) retrieves a single document that matches the provided key in the specified collection.
store.getMany(collectionName, selector, sort) retrieves multiple documents that match the provided selector in the specified collection.
Update Data
You can update data in the local store using these functions:
store.updateOne(collectionName, key, update) updates a single document that matches the provided key in the specified collection.
store.updateMany(collectionName, selector, update) updates multiple documents that match the provided selector in the specified collection.
Delete Data
You can delete data from the local data store using these functions:
store.deleteOne(collectionName, key) deletes a single document that matches the provided key in the specified collection.
store.deleteMany(collectionName, selector) deletes multiple documents that match the provided selector in the specified collection.
Perform File Operations
The Core API also provides functions to perform file operations. Here are a couple of examples:
Download a File
You can download a file from a specified URL and save it with a given file name using the core.downloadFile function.
Delete a File
To delete a file, you can use the core.deleteFile function, providing the path to the file you want to delete.
Execute plugin module in main process
To execute a plugin module in the main process of your application, you can follow the steps outlined below.
Import the
core
ObjectIn your main process code (e.g.,
index.ts
), start by importing thecore
object from the@janhq/plugin-core
library.Define the Module Path
Specify the path to the plugin module you want to execute. This path should lead to the module file (e.g., module.js) that contains the functions you wish to call.
Define the Function to Execute
Create a function that will execute a function defined in your plugin module. In the example provided, the function
getConversationMessages
is created to invoke thegetConvMessages
function from the plugin module.Define Your Plugin Module
In your plugin module (e.g., module.ts), define the logic for the function you wish to execute. In the example, the function getConvMessages is defined with a placeholder comment indicating where your logic should be implemented.
CoreService API
The
CoreService
type is an exported union type that includes:StoreService
DataService
InferenceService
ModelManagementService
SystemMonitoringService
PreferenceService
StoreService
The
StoreService
enum represents available methods for managing the database store. It includes the following methods:CreateCollection
: Creates a new collection in the data store.DeleteCollection
: Deletes an existing collection from the data store.InsertOne
: Inserts a new value into an existing collection in the data store.UpdateOne
: Updates an existing value in an existing collection in the data store.UpdateMany
: Updates multiple records in a collection in the data store.DeleteOne
: Deletes an existing value from an existing collection in the data store.DeleteMany
: Deletes multiple records in a collection in the data store.FindMany
: Retrieves multiple records from a collection in the data store.FindOne
: Retrieves a single record from a collection in the data store.DataService
The
DataService
enum represents methods related to managing conversations and messages. It includes the following methods:GetConversations
: Gets a list of conversations from the data store.CreateConversation
: Creates a new conversation in the data store.DeleteConversation
: Deletes an existing conversation from the data store.CreateMessage
: Creates a new message in an existing conversation in the data store.UpdateMessage
: Updates an existing message in an existing conversation in the data store.GetConversationMessages
: Gets a list of messages for an existing conversation from the data store.InferenceService
The
InferenceService
enum exports:InferenceUrl
: The URL for the inference server.InitModel
: Initializes a model for inference.StopModel
: Stops a running inference model.ModelManagementService
The
ModelManagementService
enum provides methods for managing models:GetDownloadedModels
: Gets a list of downloaded models.GetAvailableModels
: Gets a list of available models from data store.DeleteModel
: Deletes a downloaded model.DownloadModel
: Downloads a model from the server.SearchModels
: Searches for models on the server.GetConfiguredModels
: Gets configured models from the data store.StoreModel
: Stores a model in the data store.UpdateFinishedDownloadAt
: Updates the finished download time for a model in the data store.GetUnfinishedDownloadModels
: Gets a list of unfinished download models from the data store.GetFinishedDownloadModels
: Gets a list of finished download models from the data store.DeleteDownloadModel
: Deletes a downloaded model from the data store.GetModelById
: Gets a model by its ID from the data store.PreferenceService
The
PreferenceService
enum provides methods for managing plugin preferences:ExperimentComponent
: Represents the UI experiment component for a testing function.SystemMonitoringService
The
SystemMonitoringService
enum includes methods for monitoring system resources:GetResourcesInfo
: Gets information about system resources.GetCurrentLoad
: Gets the current system load.For more detailed information on each of these components, please refer to the source code.