2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pulsar上でテキスト生成できるようにした

Posted at

はじめに

Pulsarテキストエディタ上でLLMによるテキスト生成を行えるようにパッケージを開発しました。

これは、ファイル先頭からカーソル位置までをプロンプトとしてLLMに投げ、生成結果をカーソル位置に順次挿入する、という単純な動作をするものです。
screenshot.gif
text-generation-webuiのnotebookと似たようなことをエディタ上で実現する、といった感じ。
バックエンドとしてはllama.cpptext-generation-webuiで動作するローカルLLM、もしくはGoogle AI StudioGemini APIを使えるようにしてあります。

この記事ではPulsarパッケージ開発の大まかな流れや便利だった情報源を軽くまとめます。

前提知識

  • Pulsar: 旧Atom。GitHubによる開発が終了した後、コミュニティがメンテしているもの。
  • パッケージ: Pulsar用の拡張機能。Pulsar自体がChromiumの上で動いているので、ごく普通のJavaScriptで書けば動く。
    • 要はChromiumなので、おなじみDeveloper Toolsが動作する。JavaScriptデバッガも使える。
    • wasmも動作する。今回のパッケージではOpenAI系のトークナイザtiktokenのwasm実装が動いている。
  • テストフレームワークはJasmine
  • ppm: pulsar package manager。旧apm。Atom時代のドキュメントでapmと書いてある部分はこれで置き換える。

情報源

開発の流れ

Package Generatorを実行

コマンドパレットから Package Generator を実行。必要項目を入力すると空のパッケージが作成されます。

設定項目の定義

cf. Config
package mainにjson schemaで定義していきます。

export default {
  ...
  config: config,
  ...
const config = {
  local: {
    title: 'Local LLM',
    type: 'object',
    properties: {
      enable: {
        title: 'Enable',
        type: 'boolean',
        default: true,
      },
    ...

設定値の型はstring, integer, number, booleanなどがあります。enumキーを定義すればドロップダウンでの設定項目も作れます。

設定値は以下のように、 atom.config.get() を用いて取り出します。

atom.config.get('assisted-writing.local.enable')

コマンドの定義

コマンドパレットから起動できるコマンドはpackage mainの activate(state) 中にて以下のように定義します。

export default {
  ...
  activate(state) {
    ...
    this.subscriptions.add(
      atom.commands.add('atom-text-editor', {
        'assisted-writing:run': () => this.run(),
        'assisted-writing:abort': () => this.abort(),
      ...

キー文字列がコマンド名となり、実行されると値の関数が実行されます。

ホットキーの定義

keymaps/パッケージ名.jsonでホットキーを定義できます。

{
  "atom-text-editor": {
    "ctrl-alt-enter": "assisted-writing:run"
  },
  "atom-text-editor.assisted-writing-running": {
    "escape": "assisted-writing:abort"
  }
}

この場合、

  • atom-text-editorにフォーカスがある場合、CTRL+ALT+ENTERでassisted-writing:runコマンドを実行する
  • atom-text-editorに"assisted-writing-running"クラスが付いているものにフォーカスがある場合、ESCでassisted-writing:abortコマンドを実行する

という2つのホットキーが定義されています。

テスト

コマンドパレットから Window: Run Package Specsを実行するか、コマンドラインで ppm test を実行するとテストケースが実行されます。前述の通りテストフレームワークとしてJasmineがデフォルトで入っています。
GitHub Actions等でCIを組む場合、 ppm test の実行にはlibnotify4とxvfbが要るので注意してください。

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Setup Pulsar
        run: |
          sudo apt install -y libnotify4 xvfb
          wget https://github.com/pulsar-edit/pulsar/releases/download/v1.119.0/Linux.pulsar_1.119.0_amd64.deb
          sudo dpkg -i Linux.pulsar_1.119.0_amd64.deb
      - name: Install dependencies
        run: ppm i
      - name: Run tests
        run: xvfb-run -a ppm test

公開

pulsar -p publish (major, minor or patch) で公開します。この際、以下のものが必要です。

  • GitHub Personal access token
    • fine-grained personal access tokenの場合、以下の設定にする
      • Only select repositories: パッケージのレポジトリを指定
      • Repository permissions
        • Contents: read and write
  • Pulsar API token

publishを実行するとバージョンがインクリメントされたコミットが作成され、タグが作成されてpublishされます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?