二次开发tabby插件
以下同时包含idea和vscode教程。
1、tabby架构
Tabby的架构由多个crate(模块)组成,主要包括:
crates/tabby:处理核心功能和HTTP API。crates/tabby-download:从互联网获取模型。crates/tabby-inference:用于LLM推理的功能和工具。crates/tabby-scheduler:执行异步任务。ee/tabby-ui:提供Web UI。ee/tabby-webserver:集成UI并提供团队管理和身份验证。
2、了解下intellij插件结构
开发IntelliJ插件时,插件的基本项目结构如下:
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
├── build.gradle.kts # 构建脚本文件
├── gradle # Gradle包装器
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties # 包装器配置文件
├── gradlew # shell脚本
├── gradlew.bat # 批处理脚本
├── settings.gradle.kts # 对于单个项目,设置文件是可选的
└── src
└── main
├── java
│ └── io
│ └── org
│ └── example
│ └── plugin
│ ├── MyToolWindow.form
│ ├── MyToolWindow.java
│ └── MyToolWindowFactory.java
└── resources
├── images
│ ├── a.svg
│ └── b.svg
├── messages
│ ├── TBundle.properties #Bundle
└── TBundle_zh_CN.properties #国际化Bundle
├── META-INF
│ ├── plugin.xml # 插件配置文件
└── └── pluginIcon.svg #Plugin Logo ,插件在IDEA/Plugins中的展示图标
如何打包?
IntelliJ中:
1
2
gradle tasks
gradle intellij.buildplugin
VS Code中:
- 进入
./clients/vscode目录。 - 安装依赖项:
yarn。 - 开发模式下运行:
yarn run dev。 - 修改代码后,打包插件:
vsce package --no-dependencies。 - 安装生成的
.vsix文件到VS Code中。
如果遇到问题,确保VS Code版本与package.json中的engines字段兼容,并查看开发者工具控制台日志。
修改插件配置
plugin.xml
1.4.0-dev
修改
1
2
3
4
5
6
7
8
9
10
11
12
<name>Tabby</name>
<vendor url="https://tabbyml.com">TabbyML</vendor>
<description><![CDATA[
<h1 id="UmeAiCoder-plugin-for-intellij-platform">umeAiCoder Plugin for IntelliJ Platform</h1>
<p>umeAiCoder is an AI coding assistant that can suggest multi-line code or full functions in real-time.</p>
<br/>
<h2 id="demo">Demo</h2>
<p>Try our online demo <a href="https://tabby.tabbyml.com/playground/">here</a>.</p>
<h2 id="requirements">Requirements</h2>
Tabby plugin requires <a href="https://nodejs.org/">Node.js</a> v18+ installed. </p>
]]></description>
设置默认ip端口(不好使)
/Users/guanhongli/Downloads/tabby-main/clients/intellij/src/main/kotlin/com/tabbyml/intellijtabby/settings/ApplicationSettingsPanel.kt
1
2
3
4
5
6
7
8
9
10
var serverEndpoint: String
get() = serverEndpointTextField.text
set(value) {
serverEndpointTextField.text = value
}
#增加默认配置
init {
// Set a default value for serverEndpoint
serverEndpoint = "http://172.24.82.15:8186"
}
package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name": "intellij-umeAiCoder",
"version": "1.0.0-dev",
"description": "IntelliJ plugin for umeAiCoder AI coding assistant.",
"repository": "https://i2wp4yetps.feishu.cn/wiki/XORAwmB53iORXHk7YSGcRFrWnhh",
"scripts": {
"preupgrade-agent": "cd ../tabby-agent && yarn build",
"upgrade-agent": "rimraf ./node_scripts && cpy ../tabby-agent/dist/cli.js ./node_scripts/ --flat --rename=tabby-agent.js && cpy ../tabby-agent/dist/wasm/* ./node_scripts/wasm/ --flat && cpy ../tabby-agent/dist/win-ca/* ./node_scripts/win-ca/ --flat"
},
"devDependencies": {
"cpy-cli": "^4.2.0",
"rimraf": "^5.0.1",
"tabby-agent": "1.0.0-dev"
}
}
状态栏
idea
StatusBarWidgetFactory.kt //状态栏小部件
TabbyStatusBarItem.ts
修改配置
settings
- ApplicationConfigurable.kt :实现了 Configurable 接口,为插件提供了一个可配置的设置 UI。这是用户与插件设置交互的界面。
- ApplicationSettingsPanel.kt :定义了插件设置界面的布局和逻辑。这个文件负责创建和管理插件配置界面的所有组件(如输入框、复选框等)。
- ApplicationSettingsState.kt :管理和存储插件的设置状态。这个文件定义了一个或多个用于持久化插件配置的数据类。
- KeymapSettings.kt :特别管理键盘映射(快捷键)设置。这可能包括自定义键盘快捷键配置,以及与插件功能交互的快捷方式。
默认ip端口
idea
umeAiCoder/tabby-main/clients/intellij/node_scripts/tabby-agent.js
- 修改默认endpoint:”https://umeaicoder.local.umetrip.com.cn”
- 修改默认token:”auth_325ecaec60b84a46b8fc1320a1bfe10c”
- 修改[server] (感觉不改也行,有空试试)
vscode
/Users/guanhongli/Documents/umeAiCoder/tabby-main/clients/tabby-agent/src/AgentConfig.ts
需要修改的文件
配置设置导航
1
2
3
@ext:TabbyML.vscode-tabby
修改为
@ext:UmeTabby.vscode-ume-ai-coder
package.json文件
修改打包文件:
1
2
3
4
5
6
"name": "vscode-ume-ai-coder",
"publisher": "umeAiCoder",
"displayName": "umeAiCoder",
"description": "你的代码,何必要自己写...",
"homepage": "https://umedevops.local.umetrip.com.cn",
"repository": "https://umedevops.local.umetrip.com.cn/",
启动命令
cpu
1
docker run -it --gpus all -p 8080:8080 -v $HOME/.tabby:/data tabbyml/tabby serve --model TabbyML/StarCoder-1B --device cuda
常见问题解答
1. 团队自己的代码来训练模型?
是的,您可以使用团队自己的代码来训练模型。具体步骤如下:
- 检查您使用的工具或平台是否支持自定义代码训练。
- 确保代码结构化并与工具要求兼容。
- 上传代码到平台或工具。
- 配置训练过程,使用自定义代码进行训练。
- 启动训练并监控进度。
- 分析结果,调整代码以优化性能。
更多讨论可以访问Tabby社区:Tabby Slack
2. 始终无法获取模型:TabbyML/SantaCoder-1B
有时您可能会遇到无法获取模型的情况。可以尝试摆脱对注册表models.json的依赖,或检查是否能够直接加载自定义模型。
相关链接:
3. 如何指定下载镜像?
如果需要使用特定的镜像下载模型,您可以参考Tabby模型下载镜像设置。
4. Tabby支持哪些隐私和安全问题?
Tabby在数据收集和隐私方面有一些问题和解决措施。详细内容请查看:
5. Tabby支持离线模式运行吗?
是的,Tabby支持离线模式运行,您可以设置并在没有互联网连接的情况下使用Tabby。
6. 如何在M1 Mac上构建自托管服务器?
可以参考Tabby的文档来在M1 Mac上进行构建:
7. 如何构建和运行具有CUDA支持的Tabby?
如果您想构建并运行支持CUDA的Tabby,可以参考以下资源:
8. 如何创建交互式聊天窗口?
Tabby支持创建交互式聊天窗口,您可以参考相关文档和讨论:
9. 如何从头开始构建并安装VS Code扩展?
如果您需要从头开始构建并安装VS Code扩展,按以下步骤操作:
- 导航到
./clients/vscode目录。 - 使用
yarn安装依赖项。 - 使用
yarn run dev启动开发模式。 - 对代码进行修改后,使用
vsce package --no-dependencies命令打包扩展。 - 安装生成的
.vsix文件。
10. 如何在本地工作区使用Tabby VSCode扩展?
如果您希望在本地工作区而不是开发容器中使用Tabby VSCode扩展,请参考以下链接:
11. 是否可以在不触发模型下载的情况下启动Tabby容器?
可以通过特定的设置启动Tabby容器而不下载模型。
12. 如何使用Python运行Tabby服务器或自定义?
如果您希望使用Python自定义或运行Tabby服务器,请参考相关讨论:
13. 如何删除Tabby模型?
如果需要删除Tabby模型,可以参考以下讨论:
14. 为服务命令添加–chat-device标志
您可以为服务命令添加--chat-device标志,以指定使用的设备类型。更多信息请参考:
15. 如何设置身份验证令牌?
要设置身份验证令牌,请参考以下讨论:
16. 编码LLM排行榜简介
Tabby提供了一个编码LLM排行榜,帮助您了解当前模型的性能和排名:
17. 模型下载地址
以下是一些常见的模型下载链接: