prompt_engine 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +67 -0
- data/Rakefile +22 -0
- data/app/assets/stylesheets/prompt_engine/application.css +22 -0
- data/app/assets/stylesheets/prompt_engine/buttons.css +124 -0
- data/app/assets/stylesheets/prompt_engine/cards.css +63 -0
- data/app/assets/stylesheets/prompt_engine/comparison.css +244 -0
- data/app/assets/stylesheets/prompt_engine/components/_test_runs.css +144 -0
- data/app/assets/stylesheets/prompt_engine/dashboard.css +343 -0
- data/app/assets/stylesheets/prompt_engine/evaluations.css +124 -0
- data/app/assets/stylesheets/prompt_engine/forms.css +198 -0
- data/app/assets/stylesheets/prompt_engine/foundation.css +182 -0
- data/app/assets/stylesheets/prompt_engine/layout.css +75 -0
- data/app/assets/stylesheets/prompt_engine/loading.css +229 -0
- data/app/assets/stylesheets/prompt_engine/notifications.css +78 -0
- data/app/assets/stylesheets/prompt_engine/overrides.css +42 -0
- data/app/assets/stylesheets/prompt_engine/prompts.css +237 -0
- data/app/assets/stylesheets/prompt_engine/sidebar.css +90 -0
- data/app/assets/stylesheets/prompt_engine/tables.css +250 -0
- data/app/assets/stylesheets/prompt_engine/utilities.css +52 -0
- data/app/assets/stylesheets/prompt_engine/versions.css +370 -0
- data/app/clients/prompt_engine/open_ai_evals_client.rb +135 -0
- data/app/controllers/prompt_engine/admin/base_controller.rb +7 -0
- data/app/controllers/prompt_engine/application_controller.rb +4 -0
- data/app/controllers/prompt_engine/dashboard_controller.rb +24 -0
- data/app/controllers/prompt_engine/eval_runs_controller.rb +23 -0
- data/app/controllers/prompt_engine/eval_sets_controller.rb +200 -0
- data/app/controllers/prompt_engine/evaluations_controller.rb +32 -0
- data/app/controllers/prompt_engine/playground_controller.rb +57 -0
- data/app/controllers/prompt_engine/playground_run_results_controller.rb +41 -0
- data/app/controllers/prompt_engine/prompts_controller.rb +70 -0
- data/app/controllers/prompt_engine/settings_controller.rb +28 -0
- data/app/controllers/prompt_engine/test_cases_controller.rb +231 -0
- data/app/controllers/prompt_engine/versions_controller.rb +90 -0
- data/app/helpers/prompt_engine/application_helper.rb +4 -0
- data/app/jobs/prompt_engine/application_job.rb +4 -0
- data/app/mailers/prompt_engine/application_mailer.rb +6 -0
- data/app/models/prompt_engine/application_record.rb +5 -0
- data/app/models/prompt_engine/eval_result.rb +19 -0
- data/app/models/prompt_engine/eval_run.rb +40 -0
- data/app/models/prompt_engine/eval_set.rb +97 -0
- data/app/models/prompt_engine/parameter.rb +126 -0
- data/app/models/prompt_engine/parameter_parser.rb +39 -0
- data/app/models/prompt_engine/playground_run_result.rb +20 -0
- data/app/models/prompt_engine/prompt.rb +192 -0
- data/app/models/prompt_engine/prompt_version.rb +72 -0
- data/app/models/prompt_engine/setting.rb +45 -0
- data/app/models/prompt_engine/test_case.rb +29 -0
- data/app/services/prompt_engine/evaluation_runner.rb +258 -0
- data/app/services/prompt_engine/playground_executor.rb +124 -0
- data/app/services/prompt_engine/variable_detector.rb +97 -0
- data/app/views/layouts/prompt_engine/admin.html.erb +65 -0
- data/app/views/layouts/prompt_engine/application.html.erb +17 -0
- data/app/views/prompt_engine/dashboard/index.html.erb +230 -0
- data/app/views/prompt_engine/eval_runs/show.html.erb +204 -0
- data/app/views/prompt_engine/eval_sets/compare.html.erb +229 -0
- data/app/views/prompt_engine/eval_sets/edit.html.erb +111 -0
- data/app/views/prompt_engine/eval_sets/index.html.erb +63 -0
- data/app/views/prompt_engine/eval_sets/metrics.html.erb +371 -0
- data/app/views/prompt_engine/eval_sets/new.html.erb +113 -0
- data/app/views/prompt_engine/eval_sets/show.html.erb +235 -0
- data/app/views/prompt_engine/evaluations/index.html.erb +194 -0
- data/app/views/prompt_engine/playground/result.html.erb +58 -0
- data/app/views/prompt_engine/playground/show.html.erb +129 -0
- data/app/views/prompt_engine/playground_run_results/index.html.erb +99 -0
- data/app/views/prompt_engine/playground_run_results/show.html.erb +123 -0
- data/app/views/prompt_engine/prompts/_form.html.erb +224 -0
- data/app/views/prompt_engine/prompts/edit.html.erb +9 -0
- data/app/views/prompt_engine/prompts/index.html.erb +80 -0
- data/app/views/prompt_engine/prompts/new.html.erb +9 -0
- data/app/views/prompt_engine/prompts/show.html.erb +297 -0
- data/app/views/prompt_engine/settings/edit.html.erb +93 -0
- data/app/views/prompt_engine/shared/_form_errors.html.erb +16 -0
- data/app/views/prompt_engine/test_cases/edit.html.erb +72 -0
- data/app/views/prompt_engine/test_cases/import.html.erb +92 -0
- data/app/views/prompt_engine/test_cases/import_preview.html.erb +103 -0
- data/app/views/prompt_engine/test_cases/new.html.erb +79 -0
- data/app/views/prompt_engine/versions/_version_card.html.erb +56 -0
- data/app/views/prompt_engine/versions/compare.html.erb +82 -0
- data/app/views/prompt_engine/versions/index.html.erb +96 -0
- data/app/views/prompt_engine/versions/show.html.erb +98 -0
- data/config/routes.rb +61 -0
- data/db/migrate/20250124000001_create_eval_tables.rb +43 -0
- data/db/migrate/20250124000002_add_open_ai_fields_to_evals.rb +11 -0
- data/db/migrate/20250125000001_add_grader_fields_to_eval_sets.rb +8 -0
- data/db/migrate/20250723161909_create_prompts.rb +17 -0
- data/db/migrate/20250723184757_create_prompt_engine_versions.rb +24 -0
- data/db/migrate/20250723203838_create_prompt_engine_parameters.rb +20 -0
- data/db/migrate/20250724160623_create_prompt_engine_playground_run_results.rb +30 -0
- data/db/migrate/20250724165118_create_prompt_engine_settings.rb +14 -0
- data/lib/prompt_engine/engine.rb +25 -0
- data/lib/prompt_engine/version.rb +3 -0
- data/lib/prompt_engine.rb +33 -0
- data/lib/tasks/active_prompt_tasks.rake +32 -0
- data/lib/tasks/eval_demo.rake +149 -0
- metadata +293 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
module PromptEngine
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
isolate_namespace PromptEngine
|
4
|
+
|
5
|
+
config.generators do |g|
|
6
|
+
g.test_framework :rspec
|
7
|
+
g.fixture_replacement :factory_bot
|
8
|
+
g.factory_bot dir: "spec/factories"
|
9
|
+
end
|
10
|
+
|
11
|
+
# Ensure services and clients directories are in the autoload paths
|
12
|
+
config.autoload_paths += %W[#{config.root}/app/services]
|
13
|
+
config.autoload_paths += %W[#{config.root}/app/clients]
|
14
|
+
|
15
|
+
# Ensure engine's migrations are available to the host app
|
16
|
+
# This is the standard Rails engine pattern
|
17
|
+
initializer :append_migrations do |app|
|
18
|
+
unless app.root.to_s.match?(root.to_s)
|
19
|
+
config.paths["db/migrate"].expanded.each do |expanded_path|
|
20
|
+
app.config.paths["db/migrate"] << expanded_path
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "prompt_engine/version"
|
2
|
+
require "prompt_engine/engine"
|
3
|
+
|
4
|
+
module PromptEngine
|
5
|
+
class << self
|
6
|
+
# Renders a prompt by name with the given variables
|
7
|
+
# @param prompt_name [String, Symbol] The name of the prompt to render
|
8
|
+
# @param variables [Hash] Variables to interpolate into the prompt
|
9
|
+
# @return [Hash] The rendered prompt with content and system_message
|
10
|
+
def render(prompt_name, variables: {})
|
11
|
+
prompt = Prompt.active.find_by!(name: prompt_name.to_s)
|
12
|
+
|
13
|
+
{
|
14
|
+
content: interpolate_variables(prompt.content, variables),
|
15
|
+
system_message: interpolate_variables(prompt.system_message, variables),
|
16
|
+
model: prompt.model,
|
17
|
+
temperature: prompt.temperature,
|
18
|
+
max_tokens: prompt.max_tokens
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def interpolate_variables(text, variables)
|
25
|
+
return text if text.blank? || variables.empty?
|
26
|
+
|
27
|
+
text.gsub(/\{\{(\w+)\}\}/) do |match|
|
28
|
+
key = $1.to_sym
|
29
|
+
variables.fetch(key) { match }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# desc "Explaining what the task does"
|
2
|
+
# task :prompt_engine do
|
3
|
+
# # Task goes here
|
4
|
+
# end
|
5
|
+
|
6
|
+
namespace :prompt_engine do
|
7
|
+
desc "Setup dummy app for development and testing"
|
8
|
+
task setup: :environment do
|
9
|
+
puts "Setting up PromptEngine dummy app..."
|
10
|
+
|
11
|
+
dummy_root = File.expand_path("../../spec/dummy", __dir__)
|
12
|
+
|
13
|
+
Dir.chdir(dummy_root) do
|
14
|
+
# Remove existing migrations and schema
|
15
|
+
FileUtils.rm_rf(Dir.glob("db/migrate/*"))
|
16
|
+
FileUtils.rm_f("db/schema.rb")
|
17
|
+
FileUtils.rm_f("db/development.sqlite3")
|
18
|
+
FileUtils.rm_f("db/test.sqlite3")
|
19
|
+
|
20
|
+
# Install engine migrations
|
21
|
+
system("bundle exec rails prompt_engine:install:migrations")
|
22
|
+
|
23
|
+
# Create and migrate databases
|
24
|
+
system("bundle exec rails db:create")
|
25
|
+
system("bundle exec rails db:migrate")
|
26
|
+
system("RAILS_ENV=test bundle exec rails db:create")
|
27
|
+
system("RAILS_ENV=test bundle exec rails db:migrate")
|
28
|
+
|
29
|
+
puts "✅ PromptEngine dummy app setup complete!"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
namespace :prompt_engine do
|
2
|
+
desc "Demo the evaluation workflow"
|
3
|
+
task eval_demo: :environment do
|
4
|
+
puts "\n=== ActivePrompt Evaluation Demo ==="
|
5
|
+
puts "This demo will walk through the complete evaluation workflow\n\n"
|
6
|
+
|
7
|
+
# Step 1: Create or find a prompt
|
8
|
+
prompt = ActivePrompt::Prompt.find_or_create_by(name: "demo_summarizer") do |p|
|
9
|
+
p.description = "Demo prompt for testing evaluations"
|
10
|
+
p.content = "Summarize this in one word: {{text}}"
|
11
|
+
p.system_message = "You are a concise summarizer. Always respond with exactly one word."
|
12
|
+
p.model = "gpt-3.5-turbo"
|
13
|
+
p.temperature = 0.0
|
14
|
+
p.max_tokens = 10
|
15
|
+
p.status = "active"
|
16
|
+
end
|
17
|
+
puts "✓ Created prompt: #{prompt.name}"
|
18
|
+
|
19
|
+
# Step 2: Create an evaluation set
|
20
|
+
eval_set = prompt.eval_sets.find_or_create_by(name: "Demo Eval Set") do |es|
|
21
|
+
es.description = "Testing one-word summaries"
|
22
|
+
end
|
23
|
+
puts "✓ Created eval set: #{eval_set.name}"
|
24
|
+
|
25
|
+
# Step 3: Create test cases
|
26
|
+
test_cases_data = [
|
27
|
+
{
|
28
|
+
input: { "text" => "The cat is sleeping peacefully on the warm windowsill" },
|
29
|
+
expected: "Cat",
|
30
|
+
description: "Animal summary"
|
31
|
+
},
|
32
|
+
{
|
33
|
+
input: { "text" => "It's raining heavily with thunder and lightning" },
|
34
|
+
expected: "Storm",
|
35
|
+
description: "Weather summary"
|
36
|
+
},
|
37
|
+
{
|
38
|
+
input: { "text" => "The delicious pizza has cheese, pepperoni, and mushrooms" },
|
39
|
+
expected: "Pizza",
|
40
|
+
description: "Food summary"
|
41
|
+
}
|
42
|
+
]
|
43
|
+
|
44
|
+
test_cases_data.each do |tc_data|
|
45
|
+
test_case = eval_set.test_cases.find_or_create_by(
|
46
|
+
description: tc_data[:description]
|
47
|
+
) do |tc|
|
48
|
+
tc.input_variables = tc_data[:input]
|
49
|
+
tc.expected_output = tc_data[:expected]
|
50
|
+
end
|
51
|
+
puts "✓ Created test case: #{test_case.description}"
|
52
|
+
end
|
53
|
+
|
54
|
+
# Step 4: Run evaluation
|
55
|
+
puts "\n--- Running Evaluation ---"
|
56
|
+
|
57
|
+
begin
|
58
|
+
# Check if API key is configured
|
59
|
+
if Rails.application.credentials.dig(:openai, :api_key).blank?
|
60
|
+
puts "⚠️ OpenAI API key not configured"
|
61
|
+
puts " To configure: rails credentials:edit"
|
62
|
+
puts " Add: openai:\\n api_key: your-api-key"
|
63
|
+
puts "\n--- Using Mock Evaluation ---"
|
64
|
+
|
65
|
+
# Create a mock eval run
|
66
|
+
eval_run = eval_set.eval_runs.create!(
|
67
|
+
prompt_version: prompt.current_version
|
68
|
+
)
|
69
|
+
|
70
|
+
# Simulate evaluation
|
71
|
+
eval_run.update!(
|
72
|
+
status: "completed",
|
73
|
+
started_at: 2.seconds.ago,
|
74
|
+
completed_at: Time.current,
|
75
|
+
total_count: 3,
|
76
|
+
passed_count: 2,
|
77
|
+
failed_count: 1,
|
78
|
+
error_message: nil
|
79
|
+
)
|
80
|
+
|
81
|
+
puts "✓ Mock evaluation completed"
|
82
|
+
else
|
83
|
+
puts "✓ OpenAI API key found"
|
84
|
+
|
85
|
+
# Create real eval run
|
86
|
+
eval_run = eval_set.eval_runs.create!(
|
87
|
+
prompt_version: prompt.current_version
|
88
|
+
)
|
89
|
+
|
90
|
+
# Note: The actual OpenAI Evals API may not be available
|
91
|
+
# This will fall back to mock if not available
|
92
|
+
begin
|
93
|
+
ActivePrompt::EvaluationRunner.new(eval_run).execute
|
94
|
+
puts "✓ Evaluation submitted to OpenAI"
|
95
|
+
rescue ActivePrompt::OpenAIEvalsClient::NotFoundError => e
|
96
|
+
puts "⚠️ OpenAI Evals API not available on this account"
|
97
|
+
puts " Using mock evaluation instead"
|
98
|
+
|
99
|
+
eval_run.update!(
|
100
|
+
status: "completed",
|
101
|
+
started_at: 2.seconds.ago,
|
102
|
+
completed_at: Time.current,
|
103
|
+
total_count: 3,
|
104
|
+
passed_count: 2,
|
105
|
+
failed_count: 1
|
106
|
+
)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Step 5: Display results
|
111
|
+
puts "\n--- Evaluation Results ---"
|
112
|
+
eval_run.reload
|
113
|
+
puts "Status: #{eval_run.status}"
|
114
|
+
puts "Total tests: #{eval_run.total_count}"
|
115
|
+
puts "Passed: #{eval_run.passed_count}"
|
116
|
+
puts "Failed: #{eval_run.failed_count}"
|
117
|
+
|
118
|
+
if eval_run.total_count > 0
|
119
|
+
success_rate = (eval_run.passed_count.to_f / eval_run.total_count * 100).round(1)
|
120
|
+
puts "Success rate: #{success_rate}%"
|
121
|
+
end
|
122
|
+
|
123
|
+
if eval_run.error_message.present?
|
124
|
+
puts "Error: #{eval_run.error_message}"
|
125
|
+
end
|
126
|
+
|
127
|
+
# URLs to access the UI
|
128
|
+
puts "\n--- View in Browser ---"
|
129
|
+
puts "Eval Set: http://localhost:3000/prompt_engine/prompts/#{prompt.id}/eval_sets/#{eval_set.id}"
|
130
|
+
puts "Eval Run: http://localhost:3000/prompt_engine/prompts/#{prompt.id}/eval_runs/#{eval_run.id}"
|
131
|
+
rescue => e
|
132
|
+
puts "❌ Error: #{e.message}"
|
133
|
+
puts e.backtrace.first(5).join("\n")
|
134
|
+
end
|
135
|
+
|
136
|
+
puts "\n=== Demo Complete ==="
|
137
|
+
end
|
138
|
+
|
139
|
+
desc "Clean up eval demo data"
|
140
|
+
task clean_eval_demo: :environment do
|
141
|
+
prompt = ActivePrompt::Prompt.find_by(name: "demo_summarizer")
|
142
|
+
if prompt
|
143
|
+
prompt.destroy
|
144
|
+
puts "✓ Cleaned up demo data"
|
145
|
+
else
|
146
|
+
puts "No demo data to clean up"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
metadata
ADDED
@@ -0,0 +1,293 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: prompt_engine
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Avi Flombaum
|
8
|
+
bindir: bin
|
9
|
+
cert_chain: []
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
|
+
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: rails
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ">="
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '0'
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '0'
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: ruby_llm
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: bcrypt
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: sqlite3
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
type: :runtime
|
62
|
+
prerelease: false
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: rspec-rails
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '7.0'
|
75
|
+
type: :development
|
76
|
+
prerelease: false
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '7.0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: factory_bot_rails
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '6.4'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '6.4'
|
96
|
+
- !ruby/object:Gem::Dependency
|
97
|
+
name: vcr
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '6.3'
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '6.3'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: webmock
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '3.23'
|
117
|
+
type: :development
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '3.23'
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: capybara
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '3.40'
|
131
|
+
type: :development
|
132
|
+
prerelease: false
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '3.40'
|
138
|
+
- !ruby/object:Gem::Dependency
|
139
|
+
name: selenium-webdriver
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '4.20'
|
145
|
+
type: :development
|
146
|
+
prerelease: false
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - "~>"
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '4.20'
|
152
|
+
- !ruby/object:Gem::Dependency
|
153
|
+
name: simplecov
|
154
|
+
requirement: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
type: :development
|
160
|
+
prerelease: false
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
description: PromptEngine is a Rails mountable engine that provides a simple interface
|
167
|
+
for managing AI prompts, templates, and responses within Rails applications.
|
168
|
+
email:
|
169
|
+
- 4515+aviflombaum@users.noreply.github.com
|
170
|
+
executables: []
|
171
|
+
extensions: []
|
172
|
+
extra_rdoc_files: []
|
173
|
+
files:
|
174
|
+
- MIT-LICENSE
|
175
|
+
- README.md
|
176
|
+
- Rakefile
|
177
|
+
- app/assets/stylesheets/prompt_engine/application.css
|
178
|
+
- app/assets/stylesheets/prompt_engine/buttons.css
|
179
|
+
- app/assets/stylesheets/prompt_engine/cards.css
|
180
|
+
- app/assets/stylesheets/prompt_engine/comparison.css
|
181
|
+
- app/assets/stylesheets/prompt_engine/components/_test_runs.css
|
182
|
+
- app/assets/stylesheets/prompt_engine/dashboard.css
|
183
|
+
- app/assets/stylesheets/prompt_engine/evaluations.css
|
184
|
+
- app/assets/stylesheets/prompt_engine/forms.css
|
185
|
+
- app/assets/stylesheets/prompt_engine/foundation.css
|
186
|
+
- app/assets/stylesheets/prompt_engine/layout.css
|
187
|
+
- app/assets/stylesheets/prompt_engine/loading.css
|
188
|
+
- app/assets/stylesheets/prompt_engine/notifications.css
|
189
|
+
- app/assets/stylesheets/prompt_engine/overrides.css
|
190
|
+
- app/assets/stylesheets/prompt_engine/prompts.css
|
191
|
+
- app/assets/stylesheets/prompt_engine/sidebar.css
|
192
|
+
- app/assets/stylesheets/prompt_engine/tables.css
|
193
|
+
- app/assets/stylesheets/prompt_engine/utilities.css
|
194
|
+
- app/assets/stylesheets/prompt_engine/versions.css
|
195
|
+
- app/clients/prompt_engine/open_ai_evals_client.rb
|
196
|
+
- app/controllers/prompt_engine/admin/base_controller.rb
|
197
|
+
- app/controllers/prompt_engine/application_controller.rb
|
198
|
+
- app/controllers/prompt_engine/dashboard_controller.rb
|
199
|
+
- app/controllers/prompt_engine/eval_runs_controller.rb
|
200
|
+
- app/controllers/prompt_engine/eval_sets_controller.rb
|
201
|
+
- app/controllers/prompt_engine/evaluations_controller.rb
|
202
|
+
- app/controllers/prompt_engine/playground_controller.rb
|
203
|
+
- app/controllers/prompt_engine/playground_run_results_controller.rb
|
204
|
+
- app/controllers/prompt_engine/prompts_controller.rb
|
205
|
+
- app/controllers/prompt_engine/settings_controller.rb
|
206
|
+
- app/controllers/prompt_engine/test_cases_controller.rb
|
207
|
+
- app/controllers/prompt_engine/versions_controller.rb
|
208
|
+
- app/helpers/prompt_engine/application_helper.rb
|
209
|
+
- app/jobs/prompt_engine/application_job.rb
|
210
|
+
- app/mailers/prompt_engine/application_mailer.rb
|
211
|
+
- app/models/prompt_engine/application_record.rb
|
212
|
+
- app/models/prompt_engine/eval_result.rb
|
213
|
+
- app/models/prompt_engine/eval_run.rb
|
214
|
+
- app/models/prompt_engine/eval_set.rb
|
215
|
+
- app/models/prompt_engine/parameter.rb
|
216
|
+
- app/models/prompt_engine/parameter_parser.rb
|
217
|
+
- app/models/prompt_engine/playground_run_result.rb
|
218
|
+
- app/models/prompt_engine/prompt.rb
|
219
|
+
- app/models/prompt_engine/prompt_version.rb
|
220
|
+
- app/models/prompt_engine/setting.rb
|
221
|
+
- app/models/prompt_engine/test_case.rb
|
222
|
+
- app/services/prompt_engine/evaluation_runner.rb
|
223
|
+
- app/services/prompt_engine/playground_executor.rb
|
224
|
+
- app/services/prompt_engine/variable_detector.rb
|
225
|
+
- app/views/layouts/prompt_engine/admin.html.erb
|
226
|
+
- app/views/layouts/prompt_engine/application.html.erb
|
227
|
+
- app/views/prompt_engine/dashboard/index.html.erb
|
228
|
+
- app/views/prompt_engine/eval_runs/show.html.erb
|
229
|
+
- app/views/prompt_engine/eval_sets/compare.html.erb
|
230
|
+
- app/views/prompt_engine/eval_sets/edit.html.erb
|
231
|
+
- app/views/prompt_engine/eval_sets/index.html.erb
|
232
|
+
- app/views/prompt_engine/eval_sets/metrics.html.erb
|
233
|
+
- app/views/prompt_engine/eval_sets/new.html.erb
|
234
|
+
- app/views/prompt_engine/eval_sets/show.html.erb
|
235
|
+
- app/views/prompt_engine/evaluations/index.html.erb
|
236
|
+
- app/views/prompt_engine/playground/result.html.erb
|
237
|
+
- app/views/prompt_engine/playground/show.html.erb
|
238
|
+
- app/views/prompt_engine/playground_run_results/index.html.erb
|
239
|
+
- app/views/prompt_engine/playground_run_results/show.html.erb
|
240
|
+
- app/views/prompt_engine/prompts/_form.html.erb
|
241
|
+
- app/views/prompt_engine/prompts/edit.html.erb
|
242
|
+
- app/views/prompt_engine/prompts/index.html.erb
|
243
|
+
- app/views/prompt_engine/prompts/new.html.erb
|
244
|
+
- app/views/prompt_engine/prompts/show.html.erb
|
245
|
+
- app/views/prompt_engine/settings/edit.html.erb
|
246
|
+
- app/views/prompt_engine/shared/_form_errors.html.erb
|
247
|
+
- app/views/prompt_engine/test_cases/edit.html.erb
|
248
|
+
- app/views/prompt_engine/test_cases/import.html.erb
|
249
|
+
- app/views/prompt_engine/test_cases/import_preview.html.erb
|
250
|
+
- app/views/prompt_engine/test_cases/new.html.erb
|
251
|
+
- app/views/prompt_engine/versions/_version_card.html.erb
|
252
|
+
- app/views/prompt_engine/versions/compare.html.erb
|
253
|
+
- app/views/prompt_engine/versions/index.html.erb
|
254
|
+
- app/views/prompt_engine/versions/show.html.erb
|
255
|
+
- config/routes.rb
|
256
|
+
- db/migrate/20250124000001_create_eval_tables.rb
|
257
|
+
- db/migrate/20250124000002_add_open_ai_fields_to_evals.rb
|
258
|
+
- db/migrate/20250125000001_add_grader_fields_to_eval_sets.rb
|
259
|
+
- db/migrate/20250723161909_create_prompts.rb
|
260
|
+
- db/migrate/20250723184757_create_prompt_engine_versions.rb
|
261
|
+
- db/migrate/20250723203838_create_prompt_engine_parameters.rb
|
262
|
+
- db/migrate/20250724160623_create_prompt_engine_playground_run_results.rb
|
263
|
+
- db/migrate/20250724165118_create_prompt_engine_settings.rb
|
264
|
+
- lib/prompt_engine.rb
|
265
|
+
- lib/prompt_engine/engine.rb
|
266
|
+
- lib/prompt_engine/version.rb
|
267
|
+
- lib/tasks/active_prompt_tasks.rake
|
268
|
+
- lib/tasks/eval_demo.rake
|
269
|
+
homepage: https://github.com/aviflombaum/prompt_engine
|
270
|
+
licenses:
|
271
|
+
- MIT
|
272
|
+
metadata:
|
273
|
+
homepage_uri: https://github.com/aviflombaum/prompt_engine
|
274
|
+
source_code_uri: https://github.com/aviflombaum/prompt_engine
|
275
|
+
changelog_uri: https://github.com/aviflombaum/prompt_engine/blob/main/CHANGELOG.md
|
276
|
+
rdoc_options: []
|
277
|
+
require_paths:
|
278
|
+
- lib
|
279
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
280
|
+
requirements:
|
281
|
+
- - ">="
|
282
|
+
- !ruby/object:Gem::Version
|
283
|
+
version: '0'
|
284
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
285
|
+
requirements:
|
286
|
+
- - ">="
|
287
|
+
- !ruby/object:Gem::Version
|
288
|
+
version: '0'
|
289
|
+
requirements: []
|
290
|
+
rubygems_version: 3.6.9
|
291
|
+
specification_version: 4
|
292
|
+
summary: Rails mountable engine for AI prompt management
|
293
|
+
test_files: []
|