Sunday, 29 June 2025

For the past few months, I have been quietly working with family and friends on a small open-source AI tool that performs code reviews. It reads the diff of a pull request from GitHub and then fetches requirements from Jira or from a GitHub issue.

The tool is called Gaunt Sloth assistant, the source code can be found at GitHub:

https://github.com/andruhon/gaunt-sloth-assistant

The tool is built with TypeScript and working on Linux, Windows and MacOS.

https://www.npmjs.com/package/gaunt-sloth-assistant

Installation is as simple as npm install gaunt-sloth-assistant -g

Currently we have presets for Gemini (VertexAI), Claude (Anthropic) and for text generation models provided by Groq.

I never anticipated Gaunt Sloth to be a coding agent; I was primarily aiming for it to do code reviews for me.

But since we added filesystem support, it appeared that Gaunt Sloth is actually capable of doing a coding job (particularly with thinking models).

Today I wanted to add DeepSeek support and first I installed the necessary dependency `@langchain/deepseek` and created the following manual config:

.gsloth.config.mjs

```javascript

import { statusUpdate } from './dist/tools/statusUpdate.js';

import GthFileSystemToolkit from './dist/tools/GthFileSystemToolkit.js';

export async function configure() {

  const deepseek = await import('@langchain/deepseek');

  return {

    llm: new deepseek.ChatDeepSeek({

      model: 'deepseek-reasoner',

    }),

    tools: [

      statusUpdate,

      new GthFileSystemToolkit()

    ]

  };

}

```

With this, I was able to confirm that all functions I tried were working well.

I thought, "Why don't I ask DeepSeek to create a config preset for itself?", so I quickly created the following requirements file:

```

# Add DeepSeek preset

DeepseekReasoner confirmed to work well with Gaunt Sloth.

- Inspect manual DeepSeek config at .gsloth.config.mjs

- Inspect other existing configs at src/configs/,

- Create similar preset config for deepseek (please structure it like src/configs/anthropic.ts, but use ChatDeepSeek from `@langchain/deepseek` like in .gsloth.config.mjs)

- Update src/config.ts to make sure deepseek is supported

- Add a new integration test config to integration-tests/configs

- Don't forget to update integration-tests/setup-config.js

```

Then I started Gaunt Sloth with `gth code` and typed `implement req/deepseek.md`, and it went on building.

It's a bit slowish, but once it finished, I quickly reviewed the code and it was looking fine, so I went straight to running integration tests

with `npm run it deepseek` and they all passed! This is truly impressive considering how much cheaper this model is; as of today it is US$2.19 per million tokens (Gemini Pro is $10/MTok and Claude is $15/MTok)!

I just ran `npm run lint -- --fix` and pushed this commit https://github.com/andruhon/gaunt-sloth-assistant/commit/6fe9fbd20232a63953b9dc1e5563ad8bf8eb8da9



No comments:

Post a Comment