readme: document generate, route, complete endpoints (net/dns pattern)

This commit is contained in:
Levi Neely 2026-07-18 22:56:11 +02:00
parent 120a971a0b
commit b410133759
1 changed files with 69 additions and 0 deletions

View File

@ -200,6 +200,75 @@ mv $OLLIE/s/<session-id> $OLLIE/s/my-friendly-name # rename
Rename is rejected if the agent is running or the target name already exists. All open file handles into the session are updated automatically. Rename is rejected if the agent is running or the target name already exists. All open file handles into the session are updated automatically.
## Stateless endpoints: generate, route, complete
Three root-level files provide request/response access without session state. They follow the [Plan 9 /net/dns pattern](https://9fans.github.io/plan9port/man/man3/ndb.html): open the file, write a request, then read the response from the same file descriptor. The result is per-fid (per open file descriptor) and consumed on first read.
Because the write and read must happen on the same fd, a simple `echo > file && cat file` won't work — that opens two separate fds. Use `exec` with a persistent fd, or `9p rdwr`.
### generate
One-shot LLM generation with no session context.
**Request** (JSON): `{"prompt": "...", "system": "...", "backend": "...", "model": "..."}`
All fields except `prompt` are optional. If the write is not valid JSON, the entire string is used as the prompt.
**Response**: the model's text output.
```sh
# Using exec to keep the fd open:
exec 3<> $OLLIE/generate
echo '{"prompt": "what is 2+2?", "backend": "ollama", "model": "qwen3:8b"}' >&3
cat <&3
exec 3>&-
# Plain text (uses default backend/model from env):
exec 3<> $OLLIE/generate
echo 'what is 2+2?' >&3
cat <&3
exec 3>&-
```
### route
Model selection: given a task description, picks the best backend+model from all available models.
**Request** (JSON): `{"task": "...", "backend": "..."}` — `backend` is optional (restricts candidates).
Plain text is treated as the task.
**Response**: `backend=<name> model=<name>`
The classifier uses `OLLIE_ROUTE_BACKEND` (default: `ollama`) and `OLLIE_ROUTE_MODEL` (default: `qwen3:8b`).
```sh
exec 3<> $OLLIE/route
echo 'write a bash script to parse JSON' >&3
cat <&3
exec 3>&-
# → backend=openrouter model=anthropic/claude-sonnet-4-20250514
```
### complete
Code completion: given file context (prefix/suffix around the cursor), returns a suggested insertion.
**Request** (JSON): `{"cwd": "...", "file": "...", "prefix": "...", "suffix": "...", "context": "..."}`
All fields except `prefix` are optional. Plain text is treated as the prefix.
Uses `OLLIE_COMPLETE_BACKEND` and `OLLIE_COMPLETE_MODEL`.
**Response**: the completion text.
```sh
exec 3<> $OLLIE/complete
echo '{"prefix": "func main() {\n\t", "suffix": "\n}", "file": "main.go"}' >&3
cat <&3
exec 3>&-
```
## Example shell session ## Example shell session
```sh ```sh