二次开发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插件时,插件的基本项目结构如下:

├── 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中

gradle tasks
gradle intellij.buildplugin

VS Code中

  1. 进入./clients/vscode目录。
  2. 安装依赖项:yarn
  3. 开发模式下运行:yarn run dev
  4. 修改代码后,打包插件:vsce package --no-dependencies
  5. 安装生成的.vsix文件到VS Code中。

如果遇到问题,确保VS Code版本与package.json中的engines字段兼容,并查看开发者工具控制台日志。

修改插件配置

plugin.xml

1.4.0-dev

修改

<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

  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

{
  "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

vscode

/Users/guanhongli/Documents/umeAiCoder/tabby-main/clients/tabby-agent/src/AgentConfig.ts

需要修改的文件

配置设置导航

@ext:TabbyML.vscode-tabby
修改为
@ext:UmeTabby.vscode-ume-ai-coder

package.json文件

修改打包文件:

  "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

docker run -it --gpus all -p 8080:8080 -v $HOME/.tabby:/data tabbyml/tabby serve --model TabbyML/StarCoder-1B --device cuda

常见问题解答

1. 团队自己的代码来训练模型?

是的,您可以使用团队自己的代码来训练模型。具体步骤如下:

  1. 检查您使用的工具或平台是否支持自定义代码训练。
  2. 确保代码结构化并与工具要求兼容。
  3. 上传代码到平台或工具。
  4. 配置训练过程,使用自定义代码进行训练。
  5. 启动训练并监控进度。
  6. 分析结果,调整代码以优化性能。

更多讨论可以访问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扩展,按以下步骤操作:

  1. 导航到./clients/vscode目录。
  2. 使用yarn安装依赖项。
  3. 使用yarn run dev启动开发模式。
  4. 对代码进行修改后,使用vsce package --no-dependencies命令打包扩展。
  5. 安装生成的.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. 模型下载地址

以下是一些常见的模型下载链接: