https://github.com/noclocks/noclocksai
No Clocks AI
https://github.com/noclocks/noclocksai
Last synced: about 1 year ago
JSON representation
No Clocks AI
- Host: GitHub
- URL: https://github.com/noclocks/noclocksai
- Owner: noclocks
- Created: 2025-03-03T23:49:02.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-21T21:15:14.000Z (about 1 year ago)
- Last Synced: 2025-05-21T22:24:42.462Z (about 1 year ago)
- Language: R
- Size: 1.69 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Codemeta: codemeta.json
Awesome Lists containing this project
README
# noclocksai 
[](https://deepwiki.com/noclocks/noclocksai)

[](https://gitmcp.io/noclocks/noclocksai/chat)
[](https://github.com/noclocks/noclocksai/actions/workflows/coverage.yml)
[](https://github.com/noclocks/noclocksai/actions/workflows/rcmdcheck.yml)
[](https://github.com/noclocks/noclocksai/actions/workflows/changelog.yml)
## Overview
The `noclocksai` package provides a comprehensive toolkit for working with AI services at No Clocks, LLC. It simplifies interactions with various AI models, provides utilities for embedding, database operations, and includes a flexible agent framework for creating AI assistants.
## Key Features
- **Agent Framework**: Create and manage AI agents with memory, tools, and vector store capabilities
- **Chat Interfaces**: Simplified interactions with popular AI providers (OpenAI, Claude, Gemini)
- **Embeddings**: Generate and manage vector embeddings for RAG applications
- **Database Integration**: Store and retrieve embeddings and documents
- **API Connectors**: Wrappers for OpenAI, Google Maps, Geocoding, FireCrawl, and more
- **Utility Functions**: Tools for caching, logging, data extraction, and markdown processing
- **Mermaid Diagrams**: Generate mermaid.js diagrams with natural language
- **Configuration Management**: Secure API key and environment management
## AI & Agentic Capabilities
### LLM Provider Integrations
- **OpenAI**: GPT-4o, GPT-4, and other models
- **Anthropic**: Claude models
- **Google**: Gemini models
- **Ollama**: Local model hosting
- **Groq**: High-performance inference
### AI Agents
- **Base Agent**: R6 class with memory, tools, and vector store capabilities
- **Specialized Agents**:
- **EDA Agent**: For exploratory data analysis and anomaly detection
- **Mermaid Agent**: For generating diagrams from natural language
- **Git Agent**: For repository management and commit messages
### Included Prompt Templates
- **Code Analysis**: For analyzing and explaining code
- **Document Processing**: For document summarization and analysis
- **Exploratory Data Analysis**: For statistical analysis
- **Markdown Enhancement**: For improving markdown documents
- **Git Commits**: For generating commit messages
- **Synthetic Data**: For generating sample data
- **SQL to Text**: For explaining SQL queries
- **Execute R Code**: For safe code execution
- **Anomaly Detection**: For identifying outliers in data
### AI Tools
- **Code Tools**: Extract, format, and execute code
- **Data Analysis**: Anomaly detection, correlation analysis
- **Geospatial**: Google Maps integration, geocoding, weather data
- **Database**: Query execution with LLM assistance
- **Time & Date**: Timezone-aware functions
### External API Integrations
- **OpenWeather**: Weather data retrieval by coordinates or location
- **Google Maps**: Geocoding, place search, and location data
- **FireCrawl**: Web scraping and crawling capabilities
- **Langfuse**: Comprehensive LLM observability and analytics
- Trace chat sessions
- Record user feedback
- Manage prompt templates
- Create evaluation datasets
- Run experiments
### Type System
The package includes a robust type system for parameter validation:
- **Primitive Types**: String, number, integer, boolean, array, object
- **Complex Types**: For specialized data formats
- `type_gmaps_geocode_response`: Google Maps geocoding responses
- `type_gmaps_places_search_response`: Places API responses
- `type_dataset_docs`: Document dataset format
## Installation
You can install the development version of noclocksai from GitHub:
```R
pak::pak("noclocks/noclocksai")
```
### System Requirements
This package requires:
- R 4.1 or later
- Node.js with npm/npx (for certain features)
- Database connections (for vector stores)
## Basic Usage
### Creating a Chat Agent
```r
library(noclocksai)
# Initialize a simple chat
chat <- initialize_chat(
model = "gpt-4o",
system_prompt = "You are a helpful AI assistant."
)
# Chat with the agent
chat$chat("What is the R programming language?")
```
### Using Geocoding and Weather APIs
Below is an example of registering some tools for the chat agent to use:
```r
register_tools(
chat,
tools = list(
tool_current_time(),
tool_geocode_location(),
tool_get_weather()
)
)
# ✔ Successfully registered tool: get_current_time
# ✔ Successfully registered tool: geocode_location
# ✔ Successfully registered tool: get_weather
# ✔ Successfully registered 3 tools.
```
Now you can ask the agent about the current time or weather:
```r
# chat with tools
chat$chat("What is the current time?")
# [1] "The current time is 21:06:05 EDT on March 21, 2025."
chat$chat("What is the weather in Atlanta?")
# [1] "The current weather in Atlanta is clear with a temperature of 11.75°C. The wind is blowing at 2.75 m/s from the west, and the humidity is 34%."
```
### Creating Mermaid Diagrams
```r
# initialize agent
mermaid_agent <- initialize_chat(system_prompt = prompt_mermaid_sys())
# example code for a diagram
example <- "starwars |>
group_by(species) |>
summarise(
n = n(),
mass = mean(mass, na.rm = TRUE)
) |>
filter(
n > 1,
mass > 50
)"
# prompt for mermaid diagram
resp <- create_mermaid_diagram(
mermaid_agent,
prompt_mermaid_user(code = example)
)
resp
#```mermaid
#graph TD
# A[starwars dataset] --> B[Group by species]
# B --> C[Summarise]
# C -->|Calculate n = count of species| D
# C -->|Calculate mass = mean mass of species| D
# D --> E[Filter]
# E -->|n > 1| F[Filtered Data]
# E -->|mass > 50| F[Filtered Data]
#```
# extract code & render diagram
extract_code(resp, "mermaid") |> Diagrammer::Diagrammer()
```

### Extracting Code from Text
```r
text <- "Here's an example:
```r
library(dplyr)
mtcars |>
group_by(cyl) |>
summarise(avg_mpg = mean(mpg))
```"
# Extract the R code
code <- extract_code(text, lang = "r")
```
### Working with PostgreSQL Databases
```r
# Connect to a PostgreSQL database
conn <- db_connect(list(
driver = "PostgreSQL",
host = "localhost",
dbname = "my_database",
user = "postgres",
password = "password",
port = 5432
))
# Query the database and store documents for vector search
db_store_document(
conn,
title = "Sample Document",
content = "This is a sample document for vector search.",
metadata = list(author = "Jane Doe", date = Sys.Date())
)
# Retrieve documents using semantic search
results <- db_get_documents(conn, "sample vector search")
```
### Complex Workflow Example
The following example shows how to create an agent that uses multiple tools:
```r
# Create an agent with vector store capabilities
agent <- Agent$new(
provider = "openai",
model = "gpt-4o",
system_prompt = "You are an assistant that helps analyze real estate data.",
name = "real-estate-assistant"
)
# Register external API tools with the agent
agent$register_tool(tool_geocode_location())
agent$register_tool(tool_get_weather())
agent$register_tool(tool_gmaps_places_search())
# Connect the agent to a database for document storage
agent$db_connect(db_config = list(
driver = "PostgreSQL",
host = "34.75.86.90",
dbname = "gmh_leasing_dev",
user = "postgres",
password = "password",
port = 5432
))
# Add a resource to the agent
agent$add_resource(
name = "market_data",
content = read.csv("market_data.csv"),
type = "dataframe"
)
# Ask the agent a question that requires using multiple tools
response <- agent$chat(
"What are the current market conditions for apartment rentals in New York City,
and how might the current weather impact showings this weekend?"
)
# Save the agent state for later use
agent$save_state("agent_state.rds")
```
## Documentation
For more detailed information, see the package vignettes:
```r
# List available vignettes
vignette(package = "noclocksai")
# View a specific vignette
vignette("noclocksai", package = "noclocksai")
```
## License
This package is licensed under a proprietary license - see the [LICENSE](LICENSE) file for details.
## Contributing
This package is primarily maintained by [No Clocks, LLC](https://noclocks.dev). Please file issues for bugs or feature requests.