Update: General project updates

This commit is contained in:
Rodrigo Rodriguez (Pragmatismo) 2025-12-06 11:09:12 -03:00
parent 38cb30276f
commit 67c971557e
7 changed files with 145 additions and 107 deletions

View file

@ -1382,7 +1382,7 @@ VALUES (
'Test Bot', 'Test Bot',
'Bot for automated testing', 'Bot for automated testing',
'openai', 'openai',
'{"model": "gpt-4", "temperature": 0.7}', '{"model": "gpt-5", "temperature": 0.7}',
'qdrant', 'qdrant',
'{"collection": "test_kb"}' '{"collection": "test_kb"}'
); );

View file

@ -336,9 +336,9 @@ pub trait LlmProvider: Send + Sync {
| Provider | Models | Features | | Provider | Models | Features |
|----------|--------|----------| |----------|--------|----------|
| OpenAI | GPT-4, GPT-3.5 | Streaming, Functions, Vision | | OpenAI | GPT-5, GPT-4o, o3 | Streaming, Functions, Vision |
| Anthropic | Claude 3 | Streaming, Long context | | Anthropic | Claude Sonnet 4.5, Claude Opus 4.5 | Streaming, Long context |
| Groq | Llama, Mixtral | Fast inference | | Groq | Llama 3.3, Mixtral | Fast inference |
| Ollama | Any local | Self-hosted | | Ollama | Any local | Self-hosted |
### Request Flow ### Request Flow

View file

@ -81,23 +81,23 @@ episodic-memory-auto-summarize,true
| Setting | Description | Default | | Setting | Description | Default |
|---------|-------------|---------| |---------|-------------|---------|
| `llm-provider` | LLM provider | `openai` | | `llm-provider` | LLM provider | `openai` |
| `llm-model` | Model name | `gpt-4` | | `llm-model` | Model name | `gpt-5` |
| `llm-api-key` | API key (or use env) | - | | `llm-api-key` | API key (or use env) | - |
| `llm-endpoint` | Custom endpoint | Provider default | | `llm-endpoint` | Custom endpoint | Provider default |
```csv ```csv
name,value name,value
llm-provider,openai llm-provider,openai
llm-model,gpt-4-turbo llm-model,gpt-5
``` ```
### Supported Providers ### Supported Providers
| Provider | Models | | Provider | Models |
|----------|--------| |----------|--------|
| `openai` | `gpt-4`, `gpt-4-turbo`, `gpt-3.5-turbo` | | `openai` | `gpt-5`, `gpt-5-mini`, `o3` |
| `anthropic` | `claude-3-opus`, `claude-3-sonnet` | | `anthropic` | `claude-sonnet-4.5`, `claude-opus-4.5` |
| `groq` | `llama-3-70b`, `mixtral-8x7b` | | `groq` | `llama-3.3-70b`, `mixtral-8x7b` |
| `ollama` | Any local model | | `ollama` | Any local model |
## Feature Flags ## Feature Flags
@ -292,7 +292,7 @@ theme-logo,https://acme.com/logo.svg
episodic-memory-history,2 episodic-memory-history,2
episodic-memory-threshold,4 episodic-memory-threshold,4
llm-provider,openai llm-provider,openai
llm-model,gpt-4-turbo llm-model,gpt-5
feature-voice,false feature-voice,false
feature-file-upload,true feature-file-upload,true
feature-suggestions,true feature-suggestions,true

View file

@ -8,6 +8,7 @@ use diesel::{
PgConnection, PgConnection,
}; };
use futures_util::StreamExt; use futures_util::StreamExt;
#[cfg(feature = "progress-bars")]
use indicatif::{ProgressBar, ProgressStyle}; use indicatif::{ProgressBar, ProgressStyle};
use reqwest::Client; use reqwest::Client;
use rhai::{Array, Dynamic}; use rhai::{Array, Dynamic};
@ -16,6 +17,7 @@ use smartstring::SmartString;
use std::error::Error; use std::error::Error;
use tokio::fs::File as TokioFile; use tokio::fs::File as TokioFile;
use tokio::io::AsyncWriteExt; use tokio::io::AsyncWriteExt;
pub async fn create_s3_operator( pub async fn create_s3_operator(
config: &DriveConfig, config: &DriveConfig,
) -> Result<S3Client, Box<dyn std::error::Error>> { ) -> Result<S3Client, Box<dyn std::error::Error>> {
@ -41,6 +43,7 @@ pub async fn create_s3_operator(
.build(); .build();
Ok(S3Client::from_conf(s3_config)) Ok(S3Client::from_conf(s3_config))
} }
pub fn json_value_to_dynamic(value: &Value) -> Dynamic { pub fn json_value_to_dynamic(value: &Value) -> Dynamic {
match value { match value {
Value::Null => Dynamic::UNIT, Value::Null => Dynamic::UNIT,
@ -67,6 +70,7 @@ pub fn json_value_to_dynamic(value: &Value) -> Dynamic {
), ),
} }
} }
pub fn to_array(value: Dynamic) -> Array { pub fn to_array(value: Dynamic) -> Array {
if value.is_array() { if value.is_array() {
value.cast::<Array>() value.cast::<Array>()
@ -76,6 +80,9 @@ pub fn to_array(value: Dynamic) -> Array {
Array::from([value]) Array::from([value])
} }
} }
/// Download a file from a URL with progress bar (when progress-bars feature is enabled)
#[cfg(feature = "progress-bars")]
pub async fn download_file(url: &str, output_path: &str) -> Result<(), anyhow::Error> { pub async fn download_file(url: &str, output_path: &str) -> Result<(), anyhow::Error> {
let url = url.to_string(); let url = url.to_string();
let output_path = output_path.to_string(); let output_path = output_path.to_string();
@ -109,6 +116,32 @@ pub async fn download_file(url: &str, output_path: &str) -> Result<(), anyhow::E
}); });
download_handle.await? download_handle.await?
} }
/// Download a file from a URL (without progress bar when progress-bars feature is disabled)
#[cfg(not(feature = "progress-bars"))]
pub async fn download_file(url: &str, output_path: &str) -> Result<(), anyhow::Error> {
let url = url.to_string();
let output_path = output_path.to_string();
let download_handle = tokio::spawn(async move {
let client = Client::builder()
.user_agent("Mozilla/5.0 (compatible; BotServer/1.0)")
.build()?;
let response = client.get(&url).send().await?;
if response.status().is_success() {
let mut file = TokioFile::create(&output_path).await?;
let mut stream = response.bytes_stream();
while let Some(chunk_result) = stream.next().await {
let chunk = chunk_result?;
file.write_all(&chunk).await?;
}
Ok(())
} else {
Err(anyhow::anyhow!("HTTP {}: {}", response.status(), url))
}
});
download_handle.await?
}
pub fn parse_filter(filter_str: &str) -> Result<(String, Vec<String>), Box<dyn Error>> { pub fn parse_filter(filter_str: &str) -> Result<(String, Vec<String>), Box<dyn Error>> {
let parts: Vec<&str> = filter_str.split('=').collect(); let parts: Vec<&str> = filter_str.split('=').collect();
if parts.len() != 2 { if parts.len() != 2 {
@ -124,21 +157,26 @@ pub fn parse_filter(filter_str: &str) -> Result<(String, Vec<String>), Box<dyn E
} }
Ok((format!("{} = $1", column), vec![value.to_string()])) Ok((format!("{} = $1", column), vec![value.to_string()]))
} }
pub fn estimate_token_count(text: &str) -> usize { pub fn estimate_token_count(text: &str) -> usize {
let char_count = text.chars().count(); let char_count = text.chars().count();
(char_count / 4).max(1) (char_count / 4).max(1)
} }
pub fn establish_pg_connection() -> Result<PgConnection> { pub fn establish_pg_connection() -> Result<PgConnection> {
let database_url = std::env::var("DATABASE_URL").unwrap(); let database_url = std::env::var("DATABASE_URL").unwrap();
PgConnection::establish(&database_url) PgConnection::establish(&database_url)
.with_context(|| format!("Failed to connect to database at {}", database_url)) .with_context(|| format!("Failed to connect to database at {}", database_url))
} }
pub type DbPool = Pool<ConnectionManager<PgConnection>>; pub type DbPool = Pool<ConnectionManager<PgConnection>>;
pub fn create_conn() -> Result<DbPool, diesel::r2d2::PoolError> { pub fn create_conn() -> Result<DbPool, diesel::r2d2::PoolError> {
let database_url = std::env::var("DATABASE_URL").unwrap(); let database_url = std::env::var("DATABASE_URL").unwrap();
let manager = ConnectionManager::<PgConnection>::new(database_url); let manager = ConnectionManager::<PgConnection>::new(database_url);
Pool::builder().build(manager) Pool::builder().build(manager)
} }
pub fn parse_database_url(url: &str) -> (String, String, String, u32, String) { pub fn parse_database_url(url: &str) -> (String, String, String, u32, String) {
if let Some(stripped) = url.strip_prefix("postgres://") { if let Some(stripped) = url.strip_prefix("postgres://") {
let parts: Vec<&str> = stripped.split('@').collect(); let parts: Vec<&str> = stripped.split('@').collect();

View file

@ -16,21 +16,21 @@ This `.gbai` template includes the following BASIC keyword files:
### 7Timer! Astro Weather ### 7Timer! Astro Weather
Get 7-day astronomical weather forecast for stargazing. Get 7-day astronomical weather forecast for stargazing.
```vbs ```basic
PARAM location AS string LIKE "116.39,39.90" PARAM location AS string LIKE "116.39,39.90"
' Returns: Weather data for astronomy observation ' Returns: Weather data for astronomy observation
``` ```
### 7Timer! Civil Weather ### 7Timer! Civil Weather
Get 7-day civil weather forecast with temperature. Get 7-day civil weather forecast with temperature.
```vbs ```basic
PARAM location AS string LIKE "116.39,39.90" PARAM location AS string LIKE "116.39,39.90"
' Returns: Temperature, precipitation, wind data ' Returns: Temperature, precipitation, wind data
``` ```
### Open-Meteo Weather ### Open-Meteo Weather
Get real-time weather data (70+ years of historical data available). Get real-time weather data (70+ years of historical data available).
```vbs ```basic
PARAM latitude AS number LIKE 52.52 PARAM latitude AS number LIKE 52.52
PARAM longitude AS number LIKE 13.41 PARAM longitude AS number LIKE 13.41
' Returns: Current weather conditions ' Returns: Current weather conditions
@ -38,21 +38,21 @@ PARAM longitude AS number LIKE 13.41
### Rain Viewer Radar Map ### Rain Viewer Radar Map
Get available rain radar map timestamps. Get available rain radar map timestamps.
```vbs ```basic
DESCRIPTION "Get available rain radar map timestamps" DESCRIPTION "Get available rain radar map timestamps"
' Returns: Radar data for visualization ' Returns: Radar data for visualization
``` ```
### OpenSenseMap Weather Stations ### OpenSenseMap Weather Stations
Get data from personal weather stations in a bounding box. Get data from personal weather stations in a bounding box.
```vbs ```basic
PARAM bbox AS string LIKE "7.6,51.2,7.8,51.3" PARAM bbox AS string LIKE "7.6,51.2,7.8,51.3"
' Returns: Temperature data from senseBoxes ' Returns: Temperature data from senseBoxes
``` ```
### Air Quality Index ### Air Quality Index
Get Air Quality Index data for major cities. Get Air Quality Index data for major cities.
```vbs ```basic
PARAM city AS string LIKE "beijing" PARAM city AS string LIKE "beijing"
' Returns: AQI level and health recommendations ' Returns: AQI level and health recommendations
``` ```
@ -60,106 +60,106 @@ PARAM city AS string LIKE "beijing"
## 🐾 Animals APIs ## 🐾 Animals APIs
### Random Cat Fact ### Random Cat Fact
```vbs ```basic
DESCRIPTION "Get a random cat fact" DESCRIPTION "Get a random cat fact"
' Returns: Interesting cat fact ' Returns: Interesting cat fact
``` ```
### Random Dog Fact ### Random Dog Fact
```vbs ```basic
DESCRIPTION "Get a random dog fact" DESCRIPTION "Get a random dog fact"
' Returns: Interesting dog fact ' Returns: Interesting dog fact
``` ```
### Random Dog Image ### Random Dog Image
```vbs ```basic
DESCRIPTION "Get a random dog image URL" DESCRIPTION "Get a random dog image URL"
' Returns: URL and downloads image ' Returns: URL and downloads image
``` ```
### Random Cat Image ### Random Cat Image
```vbs ```basic
DESCRIPTION "Get a random cat image from Cataas" DESCRIPTION "Get a random cat image from Cataas"
' Returns: Cat image URL ' Returns: Cat image URL
``` ```
### Random Fox Image ### Random Fox Image
```vbs ```basic
DESCRIPTION "Get a random fox image" DESCRIPTION "Get a random fox image"
' Returns: Fox image URL ' Returns: Fox image URL
``` ```
### Random Duck Image ### Random Duck Image
```vbs ```basic
DESCRIPTION "Get a random duck image" DESCRIPTION "Get a random duck image"
' Returns: Duck image URL ' Returns: Duck image URL
``` ```
### Random Shiba Inu Image ### Random Shiba Inu Image
```vbs ```basic
DESCRIPTION "Get a random Shiba Inu dog image" DESCRIPTION "Get a random Shiba Inu dog image"
' Returns: Shiba Inu image URL ' Returns: Shiba Inu image URL
``` ```
### HTTP Cat (Status Code Cats) ### HTTP Cat (Status Code Cats)
```vbs ```basic
PARAM status_code AS integer LIKE 404 PARAM status_code AS integer LIKE 404
' Returns: Cat image representing HTTP status ' Returns: Cat image representing HTTP status
``` ```
### HTTP Dog (Status Code Dogs) ### HTTP Dog (Status Code Dogs)
```vbs ```basic
PARAM status_code AS integer LIKE 404 PARAM status_code AS integer LIKE 404
' Returns: Dog image representing HTTP status ' Returns: Dog image representing HTTP status
``` ```
### PlaceBear Placeholder ### PlaceBear Placeholder
```vbs ```basic
PARAM width AS integer LIKE 400 PARAM width AS integer LIKE 400
PARAM height AS integer LIKE 300 PARAM height AS integer LIKE 300
' Returns: Bear placeholder image ' Returns: Bear placeholder image
``` ```
### PlaceDog Placeholder ### PlaceDog Placeholder
```vbs ```basic
PARAM width AS integer LIKE 400 PARAM width AS integer LIKE 400
PARAM height AS integer LIKE 300 PARAM height AS integer LIKE 300
' Returns: Dog placeholder image ' Returns: Dog placeholder image
``` ```
### PlaceKitten Placeholder ### PlaceKitten Placeholder
```vbs ```basic
PARAM width AS integer LIKE 400 PARAM width AS integer LIKE 400
PARAM height AS integer LIKE 300 PARAM height AS integer LIKE 300
' Returns: Kitten placeholder image ' Returns: Kitten placeholder image
``` ```
### MeowFacts ### MeowFacts
```vbs ```basic
PARAM count AS integer LIKE 1 PARAM count AS integer LIKE 1
' Returns: Random cat facts (up to 100) ' Returns: Random cat facts (up to 100)
``` ```
### Random Axolotl ### Random Axolotl
```vbs ```basic
DESCRIPTION "Get random axolotl picture and facts" DESCRIPTION "Get random axolotl picture and facts"
' Returns: Axolotl image and facts ' Returns: Axolotl image and facts
``` ```
### Zoo Animals Info ### Zoo Animals Info
```vbs ```basic
DESCRIPTION "Get information about various zoo animals" DESCRIPTION "Get information about various zoo animals"
' Returns: Animal data with images ' Returns: Animal data with images
``` ```
### Dog Breeds List ### Dog Breeds List
```vbs ```basic
DESCRIPTION "Get a list of all dog breeds" DESCRIPTION "Get a list of all dog breeds"
' Returns: Array of dog breeds ' Returns: Array of dog breeds
``` ```
### Specific Dog Breed Image ### Specific Dog Breed Image
```vbs ```basic
PARAM breed AS string LIKE "husky" PARAM breed AS string LIKE "husky"
' Returns: Image of specified breed ' Returns: Image of specified breed
``` ```
@ -167,145 +167,145 @@ PARAM breed AS string LIKE "husky"
## 😄 Entertainment APIs ## 😄 Entertainment APIs
### Chuck Norris Joke ### Chuck Norris Joke
```vbs ```basic
DESCRIPTION "Get a random Chuck Norris joke" DESCRIPTION "Get a random Chuck Norris joke"
' Returns: Chuck Norris joke ' Returns: Chuck Norris joke
``` ```
### Chuck Norris Categories ### Chuck Norris Categories
```vbs ```basic
DESCRIPTION "Get available Chuck Norris joke categories" DESCRIPTION "Get available Chuck Norris joke categories"
' Returns: Array of categories ' Returns: Array of categories
``` ```
### Chuck Norris Joke by Category ### Chuck Norris Joke by Category
```vbs ```basic
PARAM category AS string LIKE "dev" PARAM category AS string LIKE "dev"
' Returns: Joke from specific category ' Returns: Joke from specific category
``` ```
### Dad Joke ### Dad Joke
```vbs ```basic
DESCRIPTION "Get a random dad joke" DESCRIPTION "Get a random dad joke"
' Returns: Dad joke from icanhazdadjoke ' Returns: Dad joke from icanhazdadjoke
``` ```
### Search Dad Jokes ### Search Dad Jokes
```vbs ```basic
PARAM search_term AS string LIKE "cat" PARAM search_term AS string LIKE "cat"
' Returns: Dad jokes containing search term ' Returns: Dad jokes containing search term
``` ```
### Bored Activity ### Bored Activity
```vbs ```basic
DESCRIPTION "Get a random activity suggestion" DESCRIPTION "Get a random activity suggestion"
' Returns: Activity suggestion with details ' Returns: Activity suggestion with details
``` ```
### Bored Activity by Type ### Bored Activity by Type
```vbs ```basic
PARAM activity_type AS "education", "recreational", "social", "diy", "charity", "cooking", "relaxation", "music", "busywork" PARAM activity_type AS "education", "recreational", "social", "diy", "charity", "cooking", "relaxation", "music", "busywork"
' Returns: Activity of specific type ' Returns: Activity of specific type
``` ```
### Random Useless Fact ### Random Useless Fact
```vbs ```basic
DESCRIPTION "Get a random useless but true fact" DESCRIPTION "Get a random useless but true fact"
' Returns: Useless fact ' Returns: Useless fact
``` ```
### Random Fun Fact ### Random Fun Fact
```vbs ```basic
DESCRIPTION "Get a random fun fact" DESCRIPTION "Get a random fun fact"
' Returns: Fun fact ' Returns: Fun fact
``` ```
### Kanye West Quote ### Kanye West Quote
```vbs ```basic
DESCRIPTION "Get a random Kanye West quote" DESCRIPTION "Get a random Kanye West quote"
' Returns: Kanye quote ' Returns: Kanye quote
``` ```
### Advice Slip ### Advice Slip
```vbs ```basic
DESCRIPTION "Get a random piece of advice" DESCRIPTION "Get a random piece of advice"
' Returns: Random advice ' Returns: Random advice
``` ```
### Search Advice ### Search Advice
```vbs ```basic
PARAM query AS string LIKE "love" PARAM query AS string LIKE "love"
' Returns: Advice containing query word ' Returns: Advice containing query word
``` ```
### Corporate Buzzword ### Corporate Buzzword
```vbs ```basic
DESCRIPTION "Get random corporate buzzwords" DESCRIPTION "Get random corporate buzzwords"
' Returns: Corporate buzzword phrase ' Returns: Corporate buzzword phrase
``` ```
### Yo Momma Joke ### Yo Momma Joke
```vbs ```basic
DESCRIPTION "Get a random Yo Momma joke" DESCRIPTION "Get a random Yo Momma joke"
' Returns: Yo Momma joke ' Returns: Yo Momma joke
``` ```
### Random Quote ### Random Quote
```vbs ```basic
DESCRIPTION "Get a random inspirational quote" DESCRIPTION "Get a random inspirational quote"
' Returns: Quote with author ' Returns: Quote with author
``` ```
### Quote by Author ### Quote by Author
```vbs ```basic
PARAM author AS string LIKE "einstein" PARAM author AS string LIKE "einstein"
' Returns: Quote by specific author ' Returns: Quote by specific author
``` ```
### Programming Quote ### Programming Quote
```vbs ```basic
DESCRIPTION "Get a random programming quote" DESCRIPTION "Get a random programming quote"
' Returns: Programming-related quote ' Returns: Programming-related quote
``` ```
### Zen Quote ### Zen Quote
```vbs ```basic
DESCRIPTION "Get a random Zen/Stoicism quote" DESCRIPTION "Get a random Zen/Stoicism quote"
' Returns: Zen quote ' Returns: Zen quote
``` ```
### Affirmation ### Affirmation
```vbs ```basic
DESCRIPTION "Get a random positive affirmation" DESCRIPTION "Get a random positive affirmation"
' Returns: Daily affirmation ' Returns: Daily affirmation
``` ```
### Random Trivia ### Random Trivia
```vbs ```basic
DESCRIPTION "Get a random trivia question" DESCRIPTION "Get a random trivia question"
' Returns: Trivia question with answer ' Returns: Trivia question with answer
``` ```
### Multiple Trivia Questions ### Multiple Trivia Questions
```vbs ```basic
PARAM amount AS integer LIKE 5 PARAM amount AS integer LIKE 5
' Returns: Multiple trivia questions ' Returns: Multiple trivia questions
``` ```
### Excuse Generator ### Excuse Generator
```vbs ```basic
DESCRIPTION "Get a random excuse" DESCRIPTION "Get a random excuse"
' Returns: Random excuse ' Returns: Random excuse
``` ```
### Insult Generator ### Insult Generator
```vbs ```basic
DESCRIPTION "Get a random insult (clean)" DESCRIPTION "Get a random insult (clean)"
' Returns: Random insult ' Returns: Random insult
``` ```
### Compliment Generator ### Compliment Generator
```vbs ```basic
DESCRIPTION "Get a random compliment" DESCRIPTION "Get a random compliment"
' Returns: Random compliment ' Returns: Random compliment
``` ```
@ -313,97 +313,97 @@ DESCRIPTION "Get a random compliment"
## 🍽️ Food & Drink APIs ## 🍽️ Food & Drink APIs
### Random Coffee Image ### Random Coffee Image
```vbs ```basic
DESCRIPTION "Get a random coffee image" DESCRIPTION "Get a random coffee image"
' Returns: Coffee image URL ' Returns: Coffee image URL
``` ```
### Random Food Dish ### Random Food Dish
```vbs ```basic
DESCRIPTION "Get a random food dish image" DESCRIPTION "Get a random food dish image"
' Returns: Food dish image ' Returns: Food dish image
``` ```
### Random Food by Category ### Random Food by Category
```vbs ```basic
PARAM category AS "biryani", "burger", "butter-chicken", "dessert", "dosa", "idly", "pasta", "pizza", "rice", "samosa" PARAM category AS "biryani", "burger", "butter-chicken", "dessert", "dosa", "idly", "pasta", "pizza", "rice", "samosa"
' Returns: Food image from category ' Returns: Food image from category
``` ```
### Random Meal Recipe ### Random Meal Recipe
```vbs ```basic
DESCRIPTION "Get a random meal recipe" DESCRIPTION "Get a random meal recipe"
' Returns: Full recipe with ingredients ' Returns: Full recipe with ingredients
``` ```
### Search Meal by Name ### Search Meal by Name
```vbs ```basic
PARAM meal_name AS string LIKE "chicken" PARAM meal_name AS string LIKE "chicken"
' Returns: Meals matching search ' Returns: Meals matching search
``` ```
### Random Cocktail Recipe ### Random Cocktail Recipe
```vbs ```basic
DESCRIPTION "Get a random cocktail recipe" DESCRIPTION "Get a random cocktail recipe"
' Returns: Cocktail recipe with ingredients ' Returns: Cocktail recipe with ingredients
``` ```
### Search Cocktail by Name ### Search Cocktail by Name
```vbs ```basic
PARAM cocktail_name AS string LIKE "margarita" PARAM cocktail_name AS string LIKE "margarita"
' Returns: Cocktails matching search ' Returns: Cocktails matching search
``` ```
### Search Cocktail by Ingredient ### Search Cocktail by Ingredient
```vbs ```basic
PARAM ingredient AS string LIKE "vodka" PARAM ingredient AS string LIKE "vodka"
' Returns: Cocktails with ingredient ' Returns: Cocktails with ingredient
``` ```
### Fruit Information ### Fruit Information
```vbs ```basic
PARAM fruit_name AS string LIKE "apple" PARAM fruit_name AS string LIKE "apple"
' Returns: Nutritional information ' Returns: Nutritional information
``` ```
### All Fruits List ### All Fruits List
```vbs ```basic
DESCRIPTION "Get a list of all fruits" DESCRIPTION "Get a list of all fruits"
' Returns: Array of fruits ' Returns: Array of fruits
``` ```
### Fruits by Family ### Fruits by Family
```vbs ```basic
PARAM family AS string LIKE "Rosaceae" PARAM family AS string LIKE "Rosaceae"
' Returns: Fruits from specific family ' Returns: Fruits from specific family
``` ```
### Random Taco Recipe ### Random Taco Recipe
```vbs ```basic
DESCRIPTION "Get a random taco recipe" DESCRIPTION "Get a random taco recipe"
' Returns: Taco recipe components ' Returns: Taco recipe components
``` ```
### PunkAPI Beer Info ### PunkAPI Beer Info
```vbs ```basic
DESCRIPTION "Get a random beer recipe" DESCRIPTION "Get a random beer recipe"
' Returns: Beer details and recipe ' Returns: Beer details and recipe
``` ```
### Search Beer by Name ### Search Beer by Name
```vbs ```basic
PARAM beer_name AS string LIKE "punk" PARAM beer_name AS string LIKE "punk"
' Returns: Beers matching search ' Returns: Beers matching search
``` ```
### High ABV Beers ### High ABV Beers
```vbs ```basic
PARAM min_abv AS number LIKE 8.0 PARAM min_abv AS number LIKE 8.0
' Returns: Beers with high alcohol content ' Returns: Beers with high alcohol content
``` ```
### Bacon Ipsum Text ### Bacon Ipsum Text
```vbs ```basic
PARAM paragraphs AS integer LIKE 3 PARAM paragraphs AS integer LIKE 3
' Returns: Bacon-themed lorem ipsum ' Returns: Bacon-themed lorem ipsum
``` ```
@ -411,81 +411,81 @@ PARAM paragraphs AS integer LIKE 3
## 🔧 Data Utility & Geocoding APIs ## 🔧 Data Utility & Geocoding APIs
### Generate UUID ### Generate UUID
```vbs ```basic
DESCRIPTION "Generate a random UUID v4" DESCRIPTION "Generate a random UUID v4"
' Returns: UUID string ' Returns: UUID string
``` ```
### Generate Multiple UUIDs ### Generate Multiple UUIDs
```vbs ```basic
PARAM count AS integer LIKE 5 PARAM count AS integer LIKE 5
' Returns: Array of UUIDs ' Returns: Array of UUIDs
``` ```
### Get My IP Address ### Get My IP Address
```vbs ```basic
DESCRIPTION "Get your current public IP" DESCRIPTION "Get your current public IP"
' Returns: IP address string ' Returns: IP address string
``` ```
### Get IP Geolocation ### Get IP Geolocation
```vbs ```basic
PARAM ip_address AS string LIKE "8.8.8.8" PARAM ip_address AS string LIKE "8.8.8.8"
' Returns: Country, city, coordinates, ISP ' Returns: Country, city, coordinates, ISP
``` ```
### Check if Number is Even ### Check if Number is Even
```vbs ```basic
PARAM number AS integer LIKE 42 PARAM number AS integer LIKE 42
' Returns: Boolean (humor API) ' Returns: Boolean (humor API)
``` ```
### Random Data Generator ### Random Data Generator
```vbs ```basic
DESCRIPTION "Generate random test data" DESCRIPTION "Generate random test data"
' Returns: User profile data ' Returns: User profile data
``` ```
### Generate Lorem Ipsum ### Generate Lorem Ipsum
```vbs ```basic
PARAM paragraphs AS integer LIKE 3 PARAM paragraphs AS integer LIKE 3
' Returns: Lorem ipsum text ' Returns: Lorem ipsum text
``` ```
### QR Code Generator ### QR Code Generator
```vbs ```basic
PARAM text AS string LIKE "https://pragmatismo.com.br" PARAM text AS string LIKE "https://pragmatismo.com.br"
PARAM size AS integer LIKE 200 PARAM size AS integer LIKE 200
' Returns: QR code image ' Returns: QR code image
``` ```
### Barcode Generator ### Barcode Generator
```vbs ```basic
PARAM barcode_data AS string LIKE "1234567890" PARAM barcode_data AS string LIKE "1234567890"
PARAM format AS "code128", "ean13", "upca", "code39" PARAM format AS "code128", "ean13", "upca", "code39"
' Returns: Barcode image ' Returns: Barcode image
``` ```
### Country Information ### Country Information
```vbs ```basic
PARAM country AS string LIKE "brazil" PARAM country AS string LIKE "brazil"
' Returns: Detailed country data ' Returns: Detailed country data
``` ```
### All Countries List ### All Countries List
```vbs ```basic
DESCRIPTION "Get a list of all countries" DESCRIPTION "Get a list of all countries"
' Returns: Array of 250+ countries ' Returns: Array of 250+ countries
``` ```
### Countries by Region ### Countries by Region
```vbs ```basic
PARAM region AS "africa", "americas", "asia", "europe", "oceania" PARAM region AS "africa", "americas", "asia", "europe", "oceania"
' Returns: Countries in region ' Returns: Countries in region
``` ```
### Currency Converter ### Currency Converter
```vbs ```basic
PARAM amount AS number LIKE 100 PARAM amount AS number LIKE 100
PARAM from_currency AS string LIKE "USD" PARAM from_currency AS string LIKE "USD"
PARAM to_currency AS string LIKE "EUR" PARAM to_currency AS string LIKE "EUR"
@ -493,81 +493,81 @@ PARAM to_currency AS string LIKE "EUR"
``` ```
### Timezone Info ### Timezone Info
```vbs ```basic
PARAM timezone AS string LIKE "America/New_York" PARAM timezone AS string LIKE "America/New_York"
' Returns: Current time in timezone ' Returns: Current time in timezone
``` ```
### All Timezones List ### All Timezones List
```vbs ```basic
DESCRIPTION "Get all timezones" DESCRIPTION "Get all timezones"
' Returns: Array of 400+ timezones ' Returns: Array of 400+ timezones
``` ```
### Public Holidays ### Public Holidays
```vbs ```basic
PARAM country_code AS string LIKE "US" PARAM country_code AS string LIKE "US"
PARAM year AS integer LIKE 2024 PARAM year AS integer LIKE 2024
' Returns: List of public holidays ' Returns: List of public holidays
``` ```
### Number Facts ### Number Facts
```vbs ```basic
PARAM number AS integer LIKE 42 PARAM number AS integer LIKE 42
' Returns: Interesting number fact ' Returns: Interesting number fact
``` ```
### Random Number Fact ### Random Number Fact
```vbs ```basic
DESCRIPTION "Get a random number fact" DESCRIPTION "Get a random number fact"
' Returns: Random number fact ' Returns: Random number fact
``` ```
### Date Facts ### Date Facts
```vbs ```basic
PARAM month AS integer LIKE 3 PARAM month AS integer LIKE 3
PARAM day AS integer LIKE 14 PARAM day AS integer LIKE 14
' Returns: Historical facts about date ' Returns: Historical facts about date
``` ```
### Math Fact ### Math Fact
```vbs ```basic
PARAM number AS integer LIKE 1729 PARAM number AS integer LIKE 1729
' Returns: Mathematical fact ' Returns: Mathematical fact
``` ```
### Yes or No Decision ### Yes or No Decision
```vbs ```basic
DESCRIPTION "Get a random Yes/No answer" DESCRIPTION "Get a random Yes/No answer"
' Returns: Yes or No with GIF ' Returns: Yes or No with GIF
``` ```
### Postcode Lookup UK ### Postcode Lookup UK
```vbs ```basic
PARAM postcode AS string LIKE "SW1A1AA" PARAM postcode AS string LIKE "SW1A1AA"
' Returns: UK postcode information ' Returns: UK postcode information
``` ```
### Brazilian CEP Lookup ### Brazilian CEP Lookup
```vbs ```basic
PARAM cep AS string LIKE "01310-100" PARAM cep AS string LIKE "01310-100"
' Returns: Brazilian postal code data ' Returns: Brazilian postal code data
``` ```
### JSON Placeholder Post ### JSON Placeholder Post
```vbs ```basic
DESCRIPTION "Get sample post data" DESCRIPTION "Get sample post data"
' Returns: Test post data ' Returns: Test post data
``` ```
### Random User Generator ### Random User Generator
```vbs ```basic
DESCRIPTION "Generate random user data" DESCRIPTION "Generate random user data"
' Returns: Realistic user profile ' Returns: Realistic user profile
``` ```
### Multiple Random Users ### Multiple Random Users
```vbs ```basic
PARAM count AS integer LIKE 5 PARAM count AS integer LIKE 5
' Returns: Array of user profiles ' Returns: Array of user profiles
``` ```
@ -575,7 +575,7 @@ PARAM count AS integer LIKE 5
## 🚀 Usage Examples ## 🚀 Usage Examples
### Example 1: Weather Bot ### Example 1: Weather Bot
```vbs ```basic
TALK "Where would you like to check the weather?" TALK "Where would you like to check the weather?"
HEAR city AS NAME HEAR city AS NAME
@ -592,7 +592,7 @@ TALK "Wind speed: " + weather.current_weather.windspeed + " km/h"
``` ```
### Example 2: Daily Motivation Bot ### Example 2: Daily Motivation Bot
```vbs ```basic
REM Get random quote REM Get random quote
quote_data = GET "https://api.quotable.io/random" quote_data = GET "https://api.quotable.io/random"
@ -610,7 +610,7 @@ TALK affirmation.affirmation
``` ```
### Example 3: Random Pet Image Bot ### Example 3: Random Pet Image Bot
```vbs ```basic
HEAR choice AS "Cat", "Dog", "Fox", "Duck" HEAR choice AS "Cat", "Dog", "Fox", "Duck"
IF choice = "Cat" THEN IF choice = "Cat" THEN
@ -632,7 +632,7 @@ SEND FILE file
``` ```
### Example 4: Recipe Finder Bot ### Example 4: Recipe Finder Bot
```vbs ```basic
TALK "What are you in the mood for?" TALK "What are you in the mood for?"
HEAR food AS "Meal", "Cocktail", "Beer" HEAR food AS "Meal", "Cocktail", "Beer"
@ -657,7 +657,7 @@ END IF
``` ```
### Example 5: Travel Information Bot ### Example 5: Travel Information Bot
```vbs ```basic
TALK "Which country would you like to know about?" TALK "Which country would you like to know about?"
HEAR country AS NAME HEAR country AS NAME
@ -713,7 +713,7 @@ All APIs in this package are from the [public-apis](https://github.com/public-ap
You can easily extend these keywords or create your own: You can easily extend these keywords or create your own:
```vbs ```basic
REM Template for new API keyword REM Template for new API keyword
PARAM your_param AS string LIKE "example" PARAM your_param AS string LIKE "example"
DESCRIPTION "What your keyword does" DESCRIPTION "What your keyword does"

View file

@ -133,7 +133,7 @@ Configure in `llm-server.gbot/config.csv`:
| Parameter | Description | Example | | Parameter | Description | Example |
|-----------|-------------|---------| |-----------|-------------|---------|
| `LLM Provider` | AI model provider | `openai` | | `LLM Provider` | AI model provider | `openai` |
| `LLM Model` | Specific model | `gpt-4` | | `LLM Model` | Specific model | `gpt-5` |
| `Max Tokens` | Response length limit | `500` | | `Max Tokens` | Response length limit | `500` |
| `Temperature` | Response creativity | `0.3` | | `Temperature` | Response creativity | `0.3` |
| `API Mode` | Enable API mode | `true` | | `API Mode` | Enable API mode | `true` |

View file

@ -285,7 +285,7 @@ Configure in `llm-tools.gbot/config.csv`:
| Parameter | Description | Example | | Parameter | Description | Example |
|-----------|-------------|---------| |-----------|-------------|---------|
| `LLM Provider` | AI provider | `openai` | | `LLM Provider` | AI provider | `openai` |
| `LLM Model` | Model for tool calls | `gpt-4` | | `LLM Model` | Model for tool calls | `gpt-4o` |
| `Tool Timeout` | Max tool execution time | `30` | | `Tool Timeout` | Max tool execution time | `30` |
| `Max Tool Calls` | Limit per conversation | `10` | | `Max Tool Calls` | Limit per conversation | `10` |