Skip to main content

parrotflume: Process data from a pipe or file with an OpenAI-compatible API, or chat with it.

Project description

ParrotFlume

ParrotFlume is a versatile command-line tool for using pipes (flumes) with LLMs (stochastic parrots¹), through OpenAI-compatible APIs. It also comes with a neat interactive chat CLI. Feed it through stdin, files, or keyboard input. Use it for scripting, single tasks or idle chitchat.

Operation Modes

  • Transform Mode: Transform data from stdin or file content based on a given instruction.
  • Perform Mode: Prompt the LLM about data from stdin or file content.
  • Interactive Chat Mode: Engage in a conversation with the LLM.
  • One-Shot Mode: Provide a single prompt and receive an immediate, complete response from the LLM.

Chat features

  • Model switching: Seamlessly switch between API providers and models during a conversation. Ask a second model to verify the reply of the first.
  • Markdown, LaTeX, and Color Support: Enhanced output formatting with ANSI escape sequences and LaTeX to Unicode replacement.
  • Function Calling: Let the LLM evaluate mathematical expressions, solve equations, and more using built-in functions.
  • Auto-Completion: Enjoy tab-completion for API providers, models, and file paths when using commands in the interactive chat interface.

screenshot

Installation

To install ParrotFlume, clone the repository and install the package alongside its required dependencies:

git clone https://github.com/iehgit/parrotflume.git
cd parrotflume
pip install .

Configuration

ParrotFlume uses a TOML configuration file to manage API providers, model settings, and global options. Ask parrotflume --help about the place to put it for your operating system.
For example, in Linux, the file should be placed there:

~/.config/parrotflume/parrotflume.config.toml

The configuration file is optional if all needed parameters (url, key, model) are provided otherwise.

Example Configuration (parrotflume.config.toml)

# Example TOML configuration file for parrotflume

[global_options]
temperature = 0.1     # Default temperature for the model
max_tokens = 4096     # Maximum number of tokens to generate
markdown = true       # Enable markdown rendering
latex = true          # Enable LaTeX replacement
color = true          # Enable colored output
color_name = "green"  # ANSI name for colored output

# API providers, the first in the list is used as default
[[api_providers]]
name = "openai"
base_url = "https://api.openai.com/v1/"
api_key = "<yourapikeyhere>"
model = "gpt-4o"
func = true  # Enable function calling

[[api_providers]]
name = "deepseek"
base_url = "https://api.deepseek.com/v1/"
api_key = "<yourapikeyhere>"
model = "deepseek-chat"
func = true  # Enable function calling

[[api_providers]]
name = "llama.cpp"
base_url = "http://localhost:8080/v1/"
api_key = "sk-no-key-required"  # not used, NOT allowed to be empty for llama.cpp
model = ""   # not used, allowed to be empty for llama.cpp
func = false  # Disable function calling, not yet supported by llama.cpp

Usage

Command line parameters supersede environment variables. Environment variables supersede configuration file settings.

Command-Line Parameters

General Parameters

  • --chat: Start an interactive chat session with the LLM.
  • --oneshot "<prompt>": Provide a single prompt and get an immediate response. Example:
    parrotflume --oneshot "What is the meaning of life, the universe, and everything?"
    
  • --transform "<prompt>" [filename]: Transform the content of a file using a prompt. If no filename is provided, reads from stdin. Examples:
    parrotflume --transform "Convert all strings to uppercase" input.txt 
    
    parrotflume --transform "Fix all syntax errors" < input.txt > output.txt
    
  • --perform "<prompt>" [filename]: Perform a task on the content of a file. If no filename is provided, reads from stdin. Examples:
    parrotflume --perform "Extract all email addresses" input.txt > emails.txt
    
    dmesg | parrotflume --perform "Explain all ACPI errors" 
    
  • --list: List all available models from the configured API provider. Example:
    parrotflume --list
    

API Configuration Parameters

  • --api-provider <provider>: Set the API provider (e.g., openai, deepseek, llama.cpp). Example:
    parrotflume --api-provider openai --chat
    
  • --base-url <url>: Set the base URL for the API provider. Example:
    parrotflume --base-url "https://api.openai.com/v1/" --chat
    
  • --key <key>: Set the API key for the API provider. Example:
    parrotflume --key "your-api-key-here" --chat
    
  • --model <model>: Set the model to use (e.g., gpt-4o, deepseek-chat). Example:
    parrotflume --model gpt-4o --chat
    

Model Behavior Parameters

  • --max-tokens <max>: Set the maximum number of tokens to generate. Example:
    parrotflume --max-tokens 2048 --chat
    
  • --warmth <temperature>: Set the temperature for the model. Example:
    parrotflume --warmth 0.7 --chat
    

Output Formatting Parameters

These apply to chat and one-shot modes.

  • --markdown: Enable Markdown rendering in the output.
  • --no-markdown: Disable Markdown rendering in the output.
  • --color: Enable colored output.
  • --no-color: Disable colored output.
  • --latex: Enable LaTeX replacement in the output.
  • --no-latex: Disable LaTeX replacement in the output.

Function Calling Parameters

  • --func: Enable function calling.
  • --no-func: Disable function calling.

This provides the LLM with some mathematical tools, the current date, and a way to sift through text using regex.
The function calling feature requires support from both the API provider and the LLM.

Environment Variable

You can set the OPENAI_API_KEY environment variable to avoid passing your API key in a command line where it might be logged:

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

This will override any API key specified in the configuration file.

Contributing

Contributions are welcome! Please open an issue or submit a pull request for any improvements or bug fixes.

License

ParrotFlume is licensed under an extended MIT License. See the LICENSE file for more details.

Acknowledgments

  • The name "ParrotFlume" is inspired by the exhaustion of all slightly less silly names by different projects, and the title of a paper called "On the Dangers of Stochastic Parrots: Can Language Models Be Too Big? 🦜"¹.
  • Special thanks to the developers of llama.cpp, which works nicely as a backend for ParrotFlume.

FAQ

Is it dead?

No no he's not dead, he's, he's restin'! Remarkable bird, the Norwegian Blue, idn'it, ay? Beautiful plumage!


Enjoy using ParrotFlume! For any questions or issues, please refer to the GitHub issues page.

Project details


Download files

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

Source Distribution

parrotflume-0.0.4.tar.gz (103.4 kB view details)

Uploaded Source

Built Distribution

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

parrotflume-0.0.4-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file parrotflume-0.0.4.tar.gz.

File metadata

  • Download URL: parrotflume-0.0.4.tar.gz
  • Upload date:
  • Size: 103.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.1

File hashes

Hashes for parrotflume-0.0.4.tar.gz
Algorithm Hash digest
SHA256 9357c676c586ff2d403ce1c58aec506133a2fa3c22f50583f7cc8a8a44ea0d4f
MD5 92b053945f299c3226fe375d3385bca5
BLAKE2b-256 862a64237a181df4d1c2f6474bec298d139abff9b8fb7e1336dea88bf1273c6d

See more details on using hashes here.

File details

Details for the file parrotflume-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: parrotflume-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.1

File hashes

Hashes for parrotflume-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 71f194e6c398072a7d2759ece194713e009afa2d438156a8f0f6362124c25bb0
MD5 2872c0e268d702fa725a8148ad4f9d9b
BLAKE2b-256 01e1a2cab8e4ec6152b817c5bdd4d9a0b649b3b467191a11214994a1c57d61cf

See more details on using hashes here.

Supported by

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