Agent/boîte à outils LLM expérimental avec accès direct à Vim, en utilisant neovim/pynvim. Destiné à être utilisé soit comme sous-agent pour une édition efficace des fichiers, soit comme son propre environnement d'exécution d'agent.
Construit avec :
Voici une petite vidéo de démonstration.
Il existe quelques options courantes pour utiliser les agents LLM pour modifier des fichiers :
La solution : Au lieu de demander à l'agent d'appeler un outil avec le nouveau contenu, donnez à l'agent un outil "Éditeur" qui se place dans un sous-agent avec le contexte approprié. L'éditeur simulé affiche l'état de l'éditeur en texte brut, prend en compte les frappes individuelles et reflète les mises à jour. Et pourquoi inventer votre propre éditeur alors que les LLM connaissent déjà Vim ?
️ ATTENTION : VimGPT est encore expérimental et n'est pas encore prêt pour la production.
gpt-4
semble capable de l'utiliser correctement - plus de recherches à déterminer. Vous devrez installer neovim, si vous êtes sous MacOS, vous pouvez simplement brew install neovim
. Installez ensuite depuis PyPI :
pip install vimgpt # or poetry add vimgpt
Utilisation de la CLI (destiné à la démonstration/test) :
$ vimgpt --help
usage: vimgpt [-h] [--path PATH] [--output [OUTPUT]] [--socket SOCKET] [--loglevel {DEBUG,INFO,WARNING}] [--max-calls MAX_CALLS] [--delay-seconds DELAY_SECONDS] command
VimGPT CLI
positional arguments:
command Task for VimGPT to perform on the file, in natural language:
'Rename Bob to Bill in paragraph 2`,
'make arg `user` optional on line 34',
'rewrite this in iambic pentameter', etc.
options:
-h, --help show this help message and exit
--path PATH, -p PATH File for VimGPT to open.
NOTE: for safety, VimGPT will NOT make changes directly
to the file unless the --output flag is provided.
--output [OUTPUT], -o [OUTPUT]
Specify output file. If flag is not provided,
VimGPT will NOT make changes directly to the file.
If flag is provided without value, uses the same path as the input file.
If flag is provided with no value and there is no input file specified,
will output to 'vimgpt_output.txt'.
--socket SOCKET, -s SOCKET
Path to nvim socket of running nvim process.
If left empty, VimGPT will run in headless mode.
Suggested value: '/tmp/nvimsocket'.
--loglevel {DEBUG,INFO,WARNING}
Set the logging level (default: WARNING)
--max-calls MAX_CALLS
Maximum number of LLM calls. Default is 1000.
--delay-seconds DELAY_SECONDS
Delay in seconds. If not provided, defaults to None.
Pour exécuter avec vim sans tête :
vimgpt " Edit the contents of the README file to recommend Vim as the best text editor. " --path tests/samples/README.md --loglevel INFO
Pour vous attacher à une instance Neovim en cours d'exécution afin de pouvoir voir ce qui se passe en temps réel comme le fait l'agent :
NVIM_LISTEN_ADDRESS=/tmp/nvimsocket nvim
# in separate terminal
vimgpt " Edit the contents of the README file to recommend Vim as the best text editor. " --path tests/samples/README.md --loglevel INFO --socket ' /tmp/nvimsocket '
VimGPT est destiné à être utilisé comme sous-agent/outil afin qu'il puisse être composé au sein d'agents plus grands, vous pouvez donc simplement appeler vim_gpt_agent()
directement avec un objectif spécifique.
from vimgpt import vimgpt_agent
original_file_content : str = '???'
new_file_content : str = vimgpt_agent (
command = 'Edit to recommend vim over emacs.' ,
content = original_file_content ,
file_path = 'does_not_matter_just_useful_for_prompt.md' ,
# socket=None, # or '/path/to/running/nvim'
# max_calls=1000, # can use prevent cycles
# delay_seconds=2, # if you want to follow in real-time more easily
)
Regardez vimgpt/core.py
pour vous inspirer. Pour des exemples LangChain, consultez ./vimgpt/langchain_agents/
pour des environnements d'exécution alternatifs et des exemples d'utilisation de VimGPT comme outil.
Ce projet utilise la poésie.
# If you don't already have 3.11 installed
pyenv install 3.11:latest
# typical poetry install methods didn't work for me
brew install poetry
# this will create a .venv in the project directory.
# it should automatically check the right version is installed.
poetry install
# view info about your new venv
poetry env list
# activate in your shell
poetry shell
# exit poetry env
source deactivate
Pour mettre à jour le package sur PyPI (https://pypi.org/project/vimgpt) :
poetry build
poetry config pypi-token.pypi YOUR_PYPI_TOKEN
poetry publish
Utilisez ruff + black + mypy + pytest. Si vous utilisez VSCode, vous souhaiterez peut-être suivre ces instructions pour vous assurer que les paramètres de l'extension mypy sont définis pour utiliser votre interprète actif (le venv de poésie).
black .
ruff check . --fix
mypy vimgpt
pytest -vv -s --verbose -o log_cli=true
set relativenumber
)_
ou |
mais cela n'a pas vraiment fonctionné.