跳到正文

二次开发tabby插件

二次开发tabby插件

Posted by lili on March 20, 2024 · 读取中...

    二次开发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中

    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

    修改

    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. 团队自己的代码来训练模型?

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

    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. 模型下载地址

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