0.0
The project is in a healthy, maintained state
SmartPrompt provides a flexible DSL for managing prompts, interacting with multiple LLMs, and creating composable task workers.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 2.7.1
~> 1.3.0
~> 7.1.0
~> 1.0.4
~> 0.3.0
 Project Readme

EN | 中文

SmartPrompt

SmartPrompt is a powerful Ruby gem that provides a domain-specific language (DSL), enabling other Ruby programs to conveniently and naturally call upon the capabilities of various large language models (LLMs).

Key Features

  • Flexible task composition: Combine various tasks using specific service providers + specific LLMs + specific prompts
  • Nested subtasks: Support for composing and calling other subtasks in DSL form
  • Performance optimization: Provide performance-optimal or cost-effective solutions while ensuring quality

Installation

To install the gem and add it to your application's Gemfile, execute the following command:

$ bundle add smart_prompt

If you don't use a bundler to manage dependencies, you can install the gem by executing the following command:

$ gem install smart_prompt

Usage

The following are some examples of basic usage:

llm_config.yml

adapters:
  openai: OpenAIAdapter
  ollama: OllamaAdapter
llms:
  siliconflow:
    adapter: openai
    url: https://api.siliconflow.cn/v1/
    api_key: ENV["APIKey"]
    default_model: Qwen/Qwen2.5-7B-Instruct
  llamacpp:
    adapter: openai
    url: http://localhost:8080/    
  ollama:
    adapter: ollama
    url: http://localhost:11434/
    default_model: qwen2.5
default_llm: siliconflow
worker_path: "./workers"
template_path: "./templates"

Basic usage

require 'smart_prompt'
engine = SmartPrompt::Engine.new('./config/llm_config.yml')
result = engine.call_worker(:daily_report, {location: "Shanghai"}) 
puts result

workers/daily_report.rb

SmartPrompt.define_worker :daily_report do
    use "ollama"
    model "gemma2"
    system "You are a helpful report writer."
    weather = call_worker(:weather_summary, { location: params[:location], date: "today" })
    prompt :daily_report, { weather: weather, location: params[:location] }
    send_msg
end

workers/weather_summary.rb

SmartPrompt.define_worker :weather_summary do
  use "ollama"
  model "gemma2"
  sys_msg "You are a helpful weather assistant."
  prompt :weather, { location: params[:location], date: params[:date] }
  weather_info = send_msg
  prompt :summarize, { text: weather_info }
  send_msg
end

templates/daily_report.erb

Please create a brief daily report for <%= location %> based on the following weather information:

<%= weather %>

The report should include:
1. A summary of the weather
2. Any notable events or conditions
3. Recommendations for residents

templates/weather.erb

What's the weather like in <%= location %> <%= date %>? Please provide a brief description including temperature and general conditions.

templates/summarize.erb

Please summarize the following text in one sentence:

<%= text %>