botserver/docs/src/chapter-09-api/compilation.md

189 lines
4.9 KiB
Markdown
Raw Normal View History

# Tool Compilation
2025-11-23 09:19:06 -03:00
BotServer compiles BASIC scripts (`.bas` files) into tool definitions that can be called by the LLM. The compilation process extracts parameters, descriptions, and generates metadata for tool discovery.
## Overview
The compilation process:
1. Reads `.bas` files from `.gbdialog` directories
2. Parses parameter declarations and descriptions
3. Generates tool definitions in MCP and OpenAI formats
4. Stores compiled tools in the database
5. Makes tools available for LLM invocation
## The Compilation Pipeline
### 1. File Detection
The `DriveMonitor` service watches for changes in `.gbdialog` directories:
2025-11-23 13:46:55 -03:00
- Monitors `.bas` files in drive storage
2025-11-23 09:19:06 -03:00
- Detects new or modified scripts
- Triggers compilation automatically
### 2. Source Processing
When a `.bas` file changes, the compiler:
2025-11-23 13:46:55 -03:00
- Downloads the file from drive
2025-11-23 09:19:06 -03:00
- Creates a local working directory
- Invokes the `BasicCompiler` to process the script
### 3. Parameter Extraction
The compiler parses BASIC script headers for:
- `PARAM` declarations with types and examples
- `DESCRIPTION` statements for tool documentation
- Variable names and default values
Example script header:
```basic
PARAM name AS string LIKE "John Smith" DESCRIPTION "User's full name"
PARAM age AS number LIKE 25 DESCRIPTION "User's age"
DESCRIPTION "Processes user registration"
```
### 4. Tool Definition Generation
The compiler creates structured tool definitions:
- **Tool name**: Derived from filename (without `.bas` extension)
- **Parameters**: Extracted from PARAM declarations
- **Description**: From DESCRIPTION statement
- **Script path**: Reference to the source file
### 5. Database Storage
Compiled tools are stored in the `basic_tools` table:
- Tool metadata (name, description, parameters)
- Source script content
- Bot association
- Compilation timestamp
## Compilation Output Formats
### MCP (Model Context Protocol) Format
The compiler generates MCP-compatible tool definitions:
```json
{
"name": "user_registration",
"description": "Processes user registration",
"input_schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "User's full name"
},
"age": {
"type": "number",
"description": "User's age"
}
},
"required": ["name", "age"]
}
}
```
### OpenAI Function Format
Also generates OpenAI-compatible function definitions for API compatibility:
```json
{
"name": "user_registration",
"description": "Processes user registration",
"parameters": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "User's full name"
},
"age": {
"type": "number",
"description": "User's age"
}
},
"required": ["name", "age"]
}
}
```
## Automatic Recompilation
Tools are recompiled automatically when:
- The source `.bas` file is modified
2025-11-23 13:46:55 -03:00
- The file's ETag changes in drive storage
2025-11-23 09:19:06 -03:00
- A manual recompilation is triggered
## Working Directory Structure
The compiler maintains a local working directory:
```
./work/
└── bot-name.gbai/
└── bot-name.gbdialog/
├── tool1.bas
├── tool2.bas
└── tool3.bas
```
This directory is used for:
- Caching compiled scripts
- Temporary processing
- Debug inspection
## Error Handling
Compilation errors are handled gracefully:
- Syntax errors logged with line numbers
- Missing parameters reported
- Invalid types highlighted
- Compilation continues for other tools
Common compilation errors:
- Missing DESCRIPTION statement
- Invalid PARAM syntax
- Unsupported parameter types
- Script parsing failures
## Tool Activation
After successful compilation:
1. Tool is stored in database
2025-11-23 20:12:09 -03:00
2. Available for `USE TOOL` keyword
2025-11-23 09:19:06 -03:00
3. Discoverable by LLM
4. Can be invoked in conversations
## Performance Considerations
- Compilation is triggered asynchronously
- Multiple tools compiled in parallel
- Results cached in database
- Only changed files recompiled
## Debugging Compilation
To debug compilation issues:
1. Check logs for compilation errors
2. Inspect working directory files
3. Verify parameter syntax
2025-11-23 20:12:09 -03:00
4. Test tool manually with `USE TOOL`
2025-11-23 09:19:06 -03:00
## Best Practices
1. **Always include DESCRIPTION**: Helps LLM understand tool purpose
2. **Use clear parameter names**: Self-documenting code
3. **Provide LIKE examples**: Improves LLM parameter filling
4. **Test after changes**: Verify compilation succeeded
5. **Check logs**: Monitor for compilation errors
## Limitations
- Parameters must be declared at script start
- Only supports basic types (string, number, boolean)
- Cannot have optional parameters (all are required)
- No nested object parameters
- No array parameters
## Summary
The compilation process transforms BASIC scripts into callable tools that the LLM can discover and invoke. This automatic compilation ensures that changes to scripts are immediately available for use in conversations, making development iteration fast and seamless.