Skip to main content

Groqqy ๐Ÿค–

Clean, composable micro agentic bot powered by Groq

Ultra-fast, ultra-cheap, and truly agentic. Groqqy is a multi-step reasoning agent that reads files, runs commands, searches content, and chains tool calls to complete complex tasksโ€”all with production-ready code that's perfect for learning.

Why Groqqy?

  • โšก Blazing Fast: 460+ tokens/sec (11x faster than standard inference)
  • ๐Ÿ’ฐ Ultra Cheap: $0.00002-$0.00006 per interaction (300x cheaper than GPT-4)
  • ๐Ÿง  Truly Agentic: Multi-step reasoning loop (THINK โ†’ ACT โ†’ OBSERVE)
  • ๐Ÿ› ๏ธ Tool-Capable: Execute local and platform tools with automatic chaining
  • ๐Ÿงฉ Composable: Mix and match components (Agent, Tools, Strategies, etc.)
  • ๐Ÿ“š Teaching-Friendly: Clean, readable code (<200 lines per file) perfect for learning agentic AI
  • ๐Ÿ“ Export Ready: Save conversations to markdown/HTML with full tool call visibility

What's New in v2.2.2

Pure LLM Mode & Code Quality:

  • ๐Ÿšซ Disable Tools: New tools=None parameter for pure text generation without tool-calling overhead
  • ๐Ÿ”’ Security Fixes: Replaced bare except clauses with specific exception handling
  • ๐Ÿ“ PEP 8 Compliance: All core modules now pass linting with zero issues
  • โœ… Comprehensive Testing: 20/20 tests passing including new --no-tools test suite
  • ๐Ÿ“ Complete Documentation: README and CHANGELOG fully updated

Previous Features (v2.1.0):

  • ๐Ÿ“ Conversation Export: Export full conversations to markdown/HTML with tool call details
  • ๐ŸŽ“ Self-Discovery: Agents can autonomously learn new tools via minimal seed prompts
  • ๐Ÿงช Container Testing: Reproducible testing infrastructure with Podman
  • ๐Ÿ“š Documentation Reorganization: Clean structure with guides and examples
  • ๐Ÿงน Project Cleanup: Professional structure, organized tests, comprehensive examples

See CHANGELOG.md for full history.

Installation

# Clone the repository
git clone https://github.com/scottsen/groqqy.git
cd groqqy

# Install in development mode (recommended)
pip install -e .

# Or install directly
pip install .

Requirements: Python 3.8+ and a Groq API key (free at console.groq.com)

Setup:

export GROQ_API_KEY="your-api-key-here"

Quick Start

Interactive Chat

groqqy
Groqqy ๐Ÿค– (llama-3.1-8b-instant)
Type 'help' for commands, 'exit' to quit

You: Find all Python files in the current directory
Groqqy: I'll search for Python files...
        [Searches, finds files, reports results]

You: Read the first one and summarize it
Groqqy: [Reads file, provides summary]

You: export markdown my_session.md
โœ… Conversation exported to my_session.md

Programmatic Use

from groqqy import Groqqy

# Create bot
bot = Groqqy()

# Simple chat
response, cost = bot.chat("Hello! What can you do?")
print(response)
print(f"Cost: ${cost:.6f}")

# Agentic task (agent chains tools automatically)
response, cost = bot.chat("Find all .py files and count lines in each")
print(response)
# Agent will: search_files("*.py") โ†’ read_file(each) โ†’ count โ†’ report

# Export conversation
bot.save_conversation("session.html")  # Auto-styled HTML
bot.save_conversation("session.md")     # Clean markdown

Model Selection for Tool Calling

When using Groqqy for agentic workflows with tool calling, model selection matters:

Recommended Models (2025)

Model Tool Calling Speed Cost Recommendation
llama-3.3-70b-versatile โœ… Excellent Fast $0.001/query Best for production
llama-4-scout โœ… Excellent Fast $0.0004/query Optimized for tool use
llama-3.1-8b-instant โš ๏ธ Inconsistent Fastest $0.0003/query Testing only

Known Issue: tool_use_failed Errors

Symptom: RuntimeError: Groq API error (400): tool_use_failed

Cause: Some models (especially 8b) occasionally generate tool calls wrapped in XML tags (<function=name>{...}</function>) instead of pure JSON. Groq's API rejects this format.

Solution: Use llama-3.3-70b-versatile for production tool calling:

from groqqy import Groqqy

# Recommended for production
bot = Groqqy(model="llama-3.3-70b-versatile")

# Cheaper but less reliable
bot = Groqqy(model="llama-3.1-8b-instant")  # May fail on tool calls

Cost trade-off: 70b model costs ~3x more ($0.001 vs $0.0003 per query) but provides consistent tool calling. Still 100x cheaper than Claude.

See also: Groq Tool Use Documentation | Supported Models

Custom Tools

from groqqy import Groqqy

def get_weather(city: str) -> str:
    """Get current weather for a city."""
    # Your implementation
    return f"Weather in {city}: Sunny, 72ยฐF"

def calculate_tip(bill: float, percent: float = 15.0) -> str:
    """Calculate tip amount for a bill."""
    tip = bill * (percent / 100)
    return f"Tip: ${tip:.2f}, Total: ${bill + tip:.2f}"

# Just pass functions - auto-registration!
bot = Groqqy(tools=[get_weather, calculate_tip])

response, cost = bot.chat("What's the weather in San Francisco?")
# Agent automatically calls get_weather("San Francisco")

Pure LLM Mode (No Tools)

Sometimes you want pure text generation without any tool-calling:

from groqqy import Groqqy

# Disable tools entirely for pure LLM mode
bot = Groqqy(tools=None)

# Fast, focused text generation (no tool overhead)
response, cost = bot.chat("Write a haiku about coding")
# Agent generates text directly, no tool calls attempted

When to use tools=None:

  • Pure text generation (summaries, creative writing, etc.)
  • Fact extraction from existing data
  • Scenarios where tool-calling causes problems (loops, hallucinations)
  • Faster generation with smaller models (no tool overhead)

Example use case - Fact extraction:

# Extract structured information without tools
bot = Groqqy(model="llama-3.1-8b-instant", tools=None)

data = """
Session: test-123
Files: app.py, test.py
Errors: 5 type errors, 2 lint warnings
"""

response, cost = bot.chat(f"Extract facts from this data:\n{data}")
# Clean output, no tool calls, 3x faster

Note: Omitting the tools parameter creates default tools (backwards compatible). Use tools=None explicitly to disable.

Core Features

๐Ÿง  Agentic Loop

Groqqy implements the ReAct pattern (Reasoning + Acting) for true multi-step problem solving:

User: "Find Python files and count their lines"
     โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ THINK (LLM)    โ”‚  "I need to search for .py files first"
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ACT (Tool)     โ”‚  execute: search_files("*.py")
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ OBSERVE        โ”‚  "Found: app.py, test.py, utils.py"
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ THINK (LLM)    โ”‚  "Now read each file and count lines"
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ACT (Tools)    โ”‚  execute: read_file("app.py"), read_file("test.py")...
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ†“
     [Response]

See docs/ARCHITECTURE.md for deep dive.

๐Ÿ› ๏ธ Built-in Tools

  • read_file(file_path) - Read file contents
  • run_command(command) - Execute shell commands (secure with shlex)
  • search_files(pattern, path) - Find files by glob pattern
  • search_content(query, path) - Search text in files (ripgrep)

๐ŸŒ Platform Tools (v2.0+)

Execute tools on Groq's servers (e.g., web search):

from groqqy import Groqqy, ToolRegistry

registry = ToolRegistry()
registry.register_platform_tool("browser_search")

bot = Groqqy(model="llama-3.3-70b-versatile", tools=registry)

response, cost = bot.chat(
    "What are the latest AI developments this week?"
)
# Agent uses browser_search to get current web information

๐Ÿ“ Conversation Export

Export full conversations with tool calls and results:

# During a session
bot.chat("Calculate the weather in NYC")
bot.chat("What's 15% tip on $87.50?")

# Export to markdown
bot.save_conversation("session.md")

# Export to styled HTML
bot.save_conversation("session.html")

CLI auto-export:

groqqy --export my_session.html

Interactive export:

You: export markdown conversation.md
โœ… Conversation exported to conversation.md

Exports include:

  • All user messages
  • All assistant responses
  • All tool calls with JSON arguments
  • All tool results
  • Timestamps and metadata

Perfect for documentation, debugging, or sharing agent behavior.

๐ŸŽฏ Strategy Pattern

Automatic tool execution strategy selection:

  • LocalToolStrategy: Execute tools in your environment
  • PlatformToolStrategy: Execute on Groq's servers (browser_search, etc.)
  • HybridToolStrategy: Mix local and platform tools intelligently

No configuration neededโ€”strategies auto-detect based on tool types.

Examples

Check out the examples/ directory:

  • basic_chat.py - Simple conversation
  • custom_tools.py - Adding custom tools with decorator pattern
  • tool_usage.py - Tool calling and chaining
  • export_conversation.py - Exporting to markdown/HTML
  • example_web_search.py - Using platform tools for web access
  • reveal_mvp_demo.py - Self-discovery pattern with reveal-cli
  • self_discovery_demo.py - Autonomous tool learning

Run any example:

python examples/basic_chat.py

Documentation

Architecture

Groqqy is built with clean, composable components:

groqqy/
โ”œโ”€โ”€ bot.py              # Simple facade (Groqqy class)
โ”œโ”€โ”€ agent.py            # Agentic loop (THINK/ACT/OBSERVE)
โ”œโ”€โ”€ strategy.py         # Tool execution strategies
โ”œโ”€โ”€ tool.py             # Tool registry system
โ”œโ”€โ”€ tools.py            # Built-in tools
โ”œโ”€โ”€ components/
โ”‚   โ”œโ”€โ”€ conversation.py # Message history
โ”‚   โ”œโ”€โ”€ executor.py     # Tool execution
โ”‚   โ”œโ”€โ”€ exporter.py     # Conversation export
โ”‚   โ””โ”€โ”€ tracker.py      # Cost tracking
โ””โ”€โ”€ providers/
    โ””โ”€โ”€ groq.py         # Groq API integration

Design Principles:

  • All files <365 lines (most <200)
  • Single responsibility per component
  • Easy to read, understand, and modify
  • Production-ready patterns (logging, error handling, cost tracking)

Teaching & Learning

Groqqy is designed as a teaching kernel for agentic AI. Unlike production frameworks (LangChain, LangGraph) with 50,000+ lines of code, Groqqy is:

  • โœ… ~1,500 lines for complete agentic loop
  • โœ… 88-line core algorithm - read and understand in 5 minutes
  • โœ… Explicit patterns - THINK/ACT/OBSERVE labeled in code
  • โœ… Production-ready - not toy code, real patterns
  • โœ… Pedagogical - designed for learning then extending

Perfect for:

  • Computer science courses on AI agents
  • Self-learners exploring agentic patterns
  • Developers understanding agents before using frameworks
  • Workshops and tutorials on tool-calling LLMs

See docs/TEACHING_GUIDE.md for lesson plans and learning paths.

Cost Examples

Real costs from actual usage:

Task Cost
Simple conversation $0.000022
Search files $0.000028
Run command $0.000032
Multi-step task (3 tools) ~$0.000120
1,000 interactions ~$0.03-$0.12

Compare to GPT-4: ~$10-$100 for 1,000 interactions (300x more expensive)

Testing

# Run all tests
pytest

# Run specific test category
pytest tests/unit/
pytest tests/integration/
pytest tests/examples/

# Run with coverage
pytest --cov=groqqy

# Container testing (reproducible environment)
./container_test.sh

Configuration

Groqqy supports persistent configuration via ~/.groqqy/:

~/.groqqy/
โ”œโ”€โ”€ boot.md              # System instructions loaded on startup
โ””โ”€โ”€ knowledge/           # Additional context files
    โ””โ”€โ”€ domain_info.md

CLI options:

groqqy                              # Interactive with boot.md
groqqy --prompt "What's 2+2?"       # Single-shot
groqqy --model llama-3.3-70b-versatile  # Custom model
groqqy --export chat.html           # Auto-export on exit
groqqy --no-boot                    # Skip boot.md

Models

Groqqy supports all Groq models:

# Fast and cheap (default)
bot = Groqqy(model="llama-3.1-8b-instant")

# Fastest (460+ tok/sec)
bot = Groqqy(model="llama-4-scout")

# Best quality
bot = Groqqy(model="llama-3.3-70b-versatile")

# Mixture of experts
bot = Groqqy(model="mixtral-8x7b-32768")

# Platform tools (required for browser_search)
bot = Groqqy(model="llama-3.3-70b-versatile")  # or openai/gpt-oss-20b

Contributing

Contributions welcome! See CONTRIBUTING.md for guidelines.

Quick start for contributors:

# Clone and install
git clone https://github.com/scottsen/groqqy.git
cd groqqy
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black groqqy/ tests/

# Type check
mypy groqqy/

License

MIT License - see LICENSE file for details.

Related Projects

Support & Community


Built with โค๏ธ using Groq's blazing-fast LPU inference

Perfect for: Learning agentic AI โ€ข Rapid prototyping โ€ข Cost-conscious automation โ€ข Teaching AI agents โ€ข Building proof-of-concepts

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

groqqy-2.3.0.tar.gz (34.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

groqqy-2.3.0-py3-none-any.whl (34.5 kB view details)

Uploaded Python 3

File details

Details for the file groqqy-2.3.0.tar.gz.

File metadata

  • Download URL: groqqy-2.3.0.tar.gz
  • Upload date:
  • Size: 34.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for groqqy-2.3.0.tar.gz
Algorithm Hash digest
SHA256 d7ac80adfaf07d4f4d56e5c350a6cbefa48e48c053dd9697323ead11a2a0c148
MD5 6d9fe5c8f93f6dc295c6bc635c98063b
BLAKE2b-256 d2431e32e8daacc436b3b8984587562974853160976cc618a8c2bbe0a758a90e

See more details on using hashes here.

Provenance

The following attestation bundles were made for groqqy-2.3.0.tar.gz:

Publisher: publish.yml on scottsen/groqqy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file groqqy-2.3.0-py3-none-any.whl.

File metadata

  • Download URL: groqqy-2.3.0-py3-none-any.whl
  • Upload date:
  • Size: 34.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for groqqy-2.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5688539cbbabae7c348a5ac20d05fd4938174324c94205ea015a0986f47a0434
MD5 6dc2cafc758ed47ed54cb5891cf0c494
BLAKE2b-256 92c81bc5ef2406e189768e148dfa54ef6a9947591eb83bf87306a4683107c010

See more details on using hashes here.

Provenance

The following attestation bundles were made for groqqy-2.3.0-py3-none-any.whl:

Publisher: publish.yml on scottsen/groqqy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

2.3.0 This release

2 files

2.2.2

2 files

2.2.0

2 files

2.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page