developer README

The project's README from github.com/smol-ai/developer. As one markdown file: README.md.

🐣 smol developer

Deploy agent on e2b button Morph Morph

Human-centric & Coherent Whole Program Synthesis aka your own personal junior developer

Build the thing that builds the thing! a smol dev for every dev in every situation

This is a "junior developer" agent (aka smol dev) that either:

  1. scaffolds an entire codebase out for you once you give it a product spec
  2. gives you basic building blocks to have a smol developer inside of your own app.

Instead of making and maintaining specific, rigid, one-shot starters, like create-react-app, or create-nextjs-app, this is basically is or helps you make create-anything-app where you develop your scaffolding prompt in a tight loop with your smol dev.

After the successful initial v0 launch, smol developer was rewritten to be even smol-ler, and importable from a library!

Basic Usage

In Git Repo mode

# install
git clone https://github.com/smol-ai/developer.git
cd developer
poetry install # install dependencies. pip install poetry if you need

# run
python main.py "a HTML/JS/CSS Tic Tac Toe Game" # defaults to gpt-4-0613
# python main.py "a HTML/JS/CSS Tic Tac Toe Game" --model=gpt-3.5-turbo-0613

# other cli flags
python main.py --prompt prompt.md # for longer prompts, move them into a markdown file
python main.py --prompt prompt.md --debug True # for debugging
This lets you develop apps as a human in the loop, as per the original version of smol developer.

engineering with prompts, rather than prompt engineering

The demo example in prompt.md shows the potential of AI-enabled, but still firmly human developer centric, workflow:

  • Human writes a basic prompt for the app they want to build
  • main.py generates code
  • Human runs/reads the code
  • Human can:
    • simply add to the prompt as they discover underspecified parts of the prompt
    • manually runs the code and identifies errors
    • paste the error into the prompt just like they would file a GitHub issue
    • for extra help, they can use debugger.py which reads the whole codebase to make specific code change suggestions

Loop until happiness is attained. Notice that AI is only used as long as it is adding value - once it gets in your way, just take over the codebase from your smol junior developer with no fuss and no hurt feelings. (we could also have smol-dev take over an existing codebase and bootstrap its own prompt... but that's a Future Direction)

In this way you can use your clone of this repo itself to prototype/develop your app.

In Library mode

This is the new thing in smol developer v1! Add smol developer to your own projects!

pip install smol_dev

Here you can basically look at the contents of main.py as our "documentation" of how you can use these functions and prompts in your own app:

from smol_dev.prompts import plan, specify_file_paths, generate_code_sync

prompt = "a HTML/JS/CSS Tic Tac Toe Game"

shared_deps = plan(prompt) # returns a long string representing the coding plan

# do something with the shared_deps plan if you wish, for example ask for user confirmation/edits and iterate in a loop

file_paths = specify_file_paths(prompt, shared_deps) # returns an array of strings representing the filenames it needs to write based on your prompt and shared_deps. Relies on OpenAI's new Function Calling API to guarantee JSON.

# do something with the filepaths if you wish, for example display a plan

# loop through file_paths array and generate code for each file
for file_path in file_paths:
    code = generate_code_sync(prompt, shared_deps, file_path) # generates the source code of each file

    # do something with the source code of the file, eg. write to disk or display in UI
    # there is also an async `generate_code()` version of this

In API mode (via Agent Protocol)

To start the server run:

poetry run api

or

python smol_dev/api.py

and then you can call the API using either the following commands:

To create a task run:

curl --request POST \
  --url http://localhost:8000/agent/tasks \
  --header 'Content-Type: application/json' \
  --data '{
	"input": "Write simple script in Python. It should write '\''Hello world!'\'' to hi.txt"
}'

You will get a response like this:

{"input":"Write simple script in Python. It should write 'Hello world!' to hi.txt","task_id":"d2c4e543-ae08-4a97-9ac5-5f9a4459cb19","artifacts":[]}

Then to execute one step of the task copy the task_id you got from the previous request and run:

curl --request POST \
  --url http://localhost:8000/agent/tasks/<task-id>/steps

or you can use Python client library:

from agent_protocol_client import AgentApi, ApiClient, TaskRequestBody

...

prompt = "Write simple script in Python. It should write 'Hello world!' to hi.txt"

async with ApiClient() as api_client:
    # Create an instance of the API class
    api_instance = AgentApi(api_client)
    task_request_body = TaskRequestBody(input=prompt)

    task = await api_instance.create_agent_task(
        task_request_body=task_request_body
    )
    task_id = task.task_id
    response = await api_instance.execute_agent_task_step(task_id=task_id)

...

I'm actively seeking more examples, please PR yours!

sorry for the lack of examples, I know that is frustrating but I wasnt ready for so many of you lol

major forks/alternatives

please send in alternative implementations, and deploy strategies on alternative stacks!

innovations and insights

Please subscribe to https://latent.space/ for a fuller writeup and insights and reflections

Please subscribe to https://latent.space/ for a fuller writeup and insights and reflections

caveats

We were working on a Chrome Extension, which requires images to be generated, so we added some usecase specific code in there to skip destroying/regenerating them, that we haven't decided how to generalize.

We dont have access to GPT4-32k, but if we did, we'd explore dumping entire API/SDK documentation into context.

The feedback loop is very slow right now (time says about 2-4 mins to generate a program with GPT4, even with parallelization due to Modal (occasionally spiking higher)), but it's a safe bet that it will go down over time (see also "future directions" below).

future directions

things to try/would accept open issue discussions and PRs:

developer (smol-ai/developer)

Searching Database…

12.2K ·GitHub
这是什么?smol developer 是一个“初级开发者”AI 智能体,它可以根据产品规格从头搭建整个代码库,也可以作为库嵌入你自己的应用中来生成代码。
这是命令行工具、库,还是两者都是?两者都是:你可以用 Git Repo 模式运行它,通过 main.py 以人工参与的命令行流程工作;也可以把它作为 Python 库导入你自己的项目;或者将它作为服务器运行,提供 Agent Protocol API。
我该怎么让它跑起来?在 prompt.md 中写下你想要的应用描述,然后运行 main.py 生成代码;检查代码、运行它,并通过不断补充提示词,或把报错信息粘贴回去来迭代修复问题。使用 API 模式时,先启动服务器,再通过 Agent Protocol API 或 Python 客户端创建并执行任务。
使用它需要 OpenAI 的 API 密钥吗?需要。它依赖 GPT-4(演示中还提到部分示例需要 Anthropic Claude),并使用 Modal 来运行 AI 调用,实现重试和并行化。
目前主要有哪些局限?跨文件的整体一致性还不够好,因为 shareddependencies.md 并不总能记录所有硬性依赖关系;反馈循环较慢(即使并行化,每次生成也需要 2 到 4 分钟);并且它还不能自行安装依赖,也无法从运行时错误中自我修复。
debugger.py 工具是做什么用的?它会读取整个生成的代码库以及错误信息,并提出具体的代码修复建议。README 称这一功能在调试整体程序合成问题时特别好用。
README 为什么说 Markdown 就够了?Markdown 能自然地混合普通文字和代码块,因此非常适合用来为整体程序合成编写提示词,因为 GPT-4 能可靠地遵循嵌入在 Markdown 提示词中的代码。
有其他语言的实现版本吗?有。README 中链接了 JS/TS、C#/.NET 和 Golang 的社区分支,还有一个工具可以根据 Markdown 格式的 API 规格,按照 smol developer 的风格自动生成 OpenAI 插件。
它能用于现有代码库,而不是从零生成吗?目前还不完全支持。README 将通过“smol pm”从现有代码库生成 prompt.md 列为未来方向,但目前效果还不太好。
Creator
smol-ai
Size
0.2 MB
Stars
12.2K
Updated
CommitSep 25
Age
3y
Commits · 90 Days