kerplunk-ai-prompts 0.1.29 → 0.1.30

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 677bab492e5ecea4dc08893d02d7fca538ba5efad725018ca491594958eb82da
4
- data.tar.gz: 9c45c43f46042ec2b1b504d528e38a60cb19f94631aa5fceb23e1bb4c556cb01
3
+ metadata.gz: b80255cf1b766738586974f053777b1b6b62ed948524022b76828d22aa3fe99c
4
+ data.tar.gz: 1b9d2209522821095b0296f1a883e60f8f8e2e9ed3b7eda77ebc86b25195b693
5
5
  SHA512:
6
- metadata.gz: e54f75633d9ddf8a5151da5dbb5f4cae05df1f87e7371fe721e32464d896c228405082631c8ba24db7963071f5995cf291005e940174e5ba956924678dcbc2db
7
- data.tar.gz: 1c0a2680a6e55da9e709f157909fc4b99b1742fc7a784093ce00ea3bbb190a2dd37e5ec949b9e4e4eacace9f9a00834a87e06dcc0f68e504bf15a055ebbbae37
6
+ metadata.gz: dec853757d9fb09e88db14653e6d1608ce505f873267f75c67199bbe740863c00f419c2ebb3cc92dd87695cf47050e8010a98fa0344b42f8bd758625507354d2
7
+ data.tar.gz: eaa3646cb5d7f2453a1bbcafb6ebcdf9d14ecc517664013f66f32771dfafda00374955e501e888739b3a6df29230a30085b6fbd5c54e65ac413110c8ae6818a8
@@ -1,5 +1,8 @@
1
1
  require_relative "templates/generation/interview_questions"
2
2
  require_relative "templates/generation/job_description"
3
+ require_relative "templates//generation/candidate_search_criteria"
4
+ require_relative "templates//generation/invite_to_apply_email"
5
+ require_relative "templates//generation/invite_to_apply_follow_up_email"
3
6
  require_relative "templates/analysis/interview"
4
7
  require_relative "templates/analysis/interview_question"
5
8
  require_relative "templates/analysis/resume"
@@ -25,6 +28,12 @@ module Kerplunk
25
28
  Templates::Generation::InterviewQuestions.generate_prompt(*args)
26
29
  when :job_description
27
30
  Templates::Generation::JobDescription.generate_prompt(*args)
31
+ when :invite_to_apply_email
32
+ Templates::Generation::InviteToApplyEmail.generate_prompt
33
+ when :invite_to_apply_follow_up_email
34
+ Templates::Generation::InviteToApplyFollowUpEmail.generate_prompt
35
+ when :candidate_search_criteria
36
+ Templates::Generation::CandidateSearchCriteria.generate_prompt(*args)
28
37
  when :interview_question_analysis
29
38
  Templates::Analysis::InterviewQuestion.generate_prompt(*args)
30
39
  when :interview_analysis
@@ -0,0 +1,281 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kerplunk
4
+ module AI
5
+ module Prompts
6
+ module Templates
7
+ module Generation
8
+ # The CandidateSearchCriteria class is responsible for generating a prompt for search criteria
9
+ # for the search for potential candidates
10
+ class CandidateSearchCriteria # rubocop:disable Metrics/ClassLength
11
+ # Generates a candidate search prompt for a given search input.
12
+ #
13
+ # @param search_query [String] the search string input to extract job search keywords from
14
+ # @return [String] the generated candidate search prompt
15
+ def self.generate_prompt(search_query) # rubocop:disable Metrics/MethodLength
16
+ raise ArgumentError, "search_query is required" if search_query.nil? || search_query.empty?
17
+
18
+ <<~PROMPT
19
+ Respond with a RAW JSON object only. Do not include any explanatory text outside the JSON.
20
+
21
+ You are an expert technical recruiter seeking to build a query criteria for searching for potential job candidates.
22
+
23
+ You need to analyse a search query provided to you and build a search criteria object that is an array of all the possible field/operator/value objects out of it.
24
+ Additionally in the output you need to split the search query into keywords as well.
25
+
26
+ === The Search Query
27
+ #{search_query}
28
+
29
+ Search Query Example 1: Experienced software engineer who lives in Austin TX.
30
+ Example output 1: {
31
+ "search_criteria": [
32
+ { "field": "job_title", operator: "=", value: "software engineer" },
33
+ { "field": "location_name", operator: "=", value: "austin, texas, united states" },
34
+ { "field": "experience.num_sources", operator: ">", value: 2 }
35
+ ],
36
+ keywords: {
37
+ name: "Experienced Software Engineer",
38
+ geography: "Austin, Texas, USA",
39
+ location: "Austin, Texas, USA"
40
+ }
41
+ }
42
+
43
+ Search Query Example 2: Software engineers at google with 5+ years of experience.
44
+ Example output 1: {
45
+ "search_criteria": [
46
+ { "field": "job_title", operator: "=", value: "software engineer" },
47
+ { "field": "job_company_name", operator: "=", value: "google" },
48
+ { "field": "experience.num_sources", operator: ">", value: 5 }
49
+ ],
50
+ keywords: {
51
+ name: "Experienced Software Engineer",
52
+ geography: "",
53
+ location: ""
54
+ }
55
+ }
56
+
57
+ === VALUES FOR FIELD KEY
58
+ The possible values for the "field" key in each object should basically be picked out according to the following criteria:
59
+
60
+ birth_date: The day the person was born
61
+ birth_year: The year the person was born
62
+ countries: All countries associated with the person
63
+ education: The person's education information
64
+ education.summary: User-inputted summary of their education
65
+ education.degrees: The degrees the person earned at the school
66
+ education.end_date: The date the person left the school
67
+ education.gpa: The GPA the person earned at the school
68
+ education.majors: All majors the person earned at the school
69
+ education.minors: All minors the person earned at the school
70
+ education.school: The school the person attended
71
+ education.school.domain: The primary website domain associated with the school
72
+ education.school.facebook_url: The school's Facebook URL
73
+ education.school.location: The location of the school
74
+ education.school.location.continent: The continent the school is in
75
+ education.school.location.country: The country the school is in
76
+ education.school.location.locality: The locality the school is in
77
+ education.school.location.name: School location in the format "locality, region, country"
78
+ education.school.location.region: The region the school is in
79
+ education.school.name: The name of the school
80
+ education.school.type: The school type, from canonical values for school type specified in the below section
81
+ education.school.website: The website URL associated with the school
82
+ education.start_date: The date the person started at the school
83
+ emails: Email addresses associated with the person
84
+ emails.address: The fully parsed email address
85
+ emails.type: The type of email address, from canonical values for email types specified in the below section
86
+ experience: The person's work experience
87
+ experience.company: The company where the person worked
88
+ experience.company.facebook_url: The company's Facebook URL
89
+ experience.company.founded: The founding year of the company
90
+ experience.company.industry: The self-identified industry of the company, from canonical values for industries specified in the below section
91
+ experience.company.location: The location of the company's headquarters
92
+ experience.company.location.address_line_2: The street address line 2 of the company HQ address
93
+ experience.company.location.continent: The continent the company HQ is in
94
+ experience.company.location.country: The country the company HQ is in
95
+ experience.company.location.geo: City-center geo code of the company HQ, in the format "latitude, longitude"
96
+ experience.company.location.locality: The locality the company HQ is in
97
+ experience.company.location.metro: The metro area the company HQ is in
98
+ experience.company.location.name: Company HQ location in the format "locality, region, country"
99
+ experience.company.location.postal_code: The postal code of the company HQ address
100
+ experience.company.location.region: The region the company HQ is in
101
+ experience.company.location.street_address: The street address of the company HQ
102
+ experience.company.name: The company name, cleaned and standardized
103
+ experience.company.size: The self-reported company size range
104
+ experience.company.website: The company's primary website, cleaned and standardized
105
+ experience.end_date: The date the person left the company
106
+ experience.summary: User-inputted summary of their work experience
107
+ experience.num_sources: The number of total experience sources that this person has
108
+ experience.is_primary: Whether this is the person's current job or not
109
+ experience.location_names: Locations where the person has worked while with this company (if different from the company HQ)
110
+ experience.start_date: The date the person started at the company
111
+ experience.title: The person's job title while at the company
112
+ experience.title.levels: The level(s) of the job, from canonical values for job levels specified in the below section
113
+ experience.title.name: The job title itself
114
+ experience.title.role: The job role, from canonical values for job roles specified in the below section
115
+ experience.title.sub_role: The job sub role, from canonical values for job sub roles specified in the below section
116
+ experience.title.class: The job class, from canonical values for job classes specified in the below section
117
+ facebook_id: The person's Facebook profile ID based on source agreement
118
+ facebook_url: The person's Facebook profile URL based on source agreement
119
+ facebook_username: The person's Facebook profile username based on source agreement
120
+ first_name: The person's first name
121
+ last_name: The person's last name
122
+ full_name: The person's full name
123
+ sex: The person's biological sex
124
+ github_url: The person's GitHub profile URL based on source agreement
125
+ github_username: The person's GitHub profile username based on source agreement
126
+ industry: The most relevant industry for this person based on their work history, from canonical values for industries specified in the below section
127
+ interests: The person's self-reported interests
128
+ job_company_facebook_url: The person's current company's Facebook URL
129
+ job_company_founded: The person's current company's founding year
130
+ job_company_industry: The person's current company's industry, from canonical values for industries specified in the below section
131
+ job_company_linkedin_id: The person's current company's LinkedIn ID
132
+ job_company_linkedin_url: The person's current company's LinkedIn URL
133
+ job_company_location_address_line_2: The person's current company's headquarters' street address line 2
134
+ job_company_location_continent: The person's current company's headquarters' continent
135
+ job_company_location_country: The person's current company's headquarters' country
136
+ job_company_location_geo: The person's current company's headquarters' city-center geographic coordinates
137
+ job_company_location_locality: The person's current company's headquarters' locality
138
+ job_company_location_metro: The person's current company's headquarters' metro area
139
+ job_company_location_name: The person's current company's headquarters' location name in the format "locality, region, country"
140
+ job_company_location_postal_code: The person's current company's headquarters' postal code
141
+ job_company_location_region: The person's current company's headquarters' region
142
+ job_company_location_street_address: The person's current company's headquarters' street address
143
+ job_company_name: The person's current company's name
144
+ job_company_size: The person's current company's size range
145
+ job_company_twitter_url: The person's current company's Twitter URL
146
+ job_company_website: The person's current company's website
147
+ job_last_changed: The timestamp that reflects when the top-level job information changed
148
+ job_last_verified: The timestamp that reflects when the information on the top level job information has been last validated by a data source
149
+ job_start_date: The date the person started their current job
150
+ job_title: The person's current job title
151
+ job_title_levels: The derived level(s) of the person's current job title, from canonical values for job levels specified in the below section
152
+ job_title_role: The derived role of the person's current job title
153
+ job_title_sub_role: The derived sub-role of the person's current job title
154
+ job_title_class: The derived class of the person's current job title
155
+ linkedin_id: The person's LinkedIn profile ID. This is null when no values in the "profiles" array are active
156
+ linkedin_url: The person's current LinkedIn profile URL. This is null when no values in the "profiles" array are active
157
+ linkedin_username: The person's LinkedIn profile username. This is null when no values in the "profiles" array are active
158
+ location_address_line_2: The person's current street address line 2
159
+ location_continent: The continent of the person's current address
160
+ location_country: The country of the person's current address
161
+ location_geo: The geo code of the city center of the person's current address
162
+ location_last_updated: The timestamp that a new data source contributed to the record for the person's current address
163
+ location_locality: The locality of the person's current address
164
+ location_metro: The metro of the person's current address
165
+ location_name: The location of the person's current address in the format "locality, region, country"
166
+ location_names: All location names (in the format "locality, region, country") associated with the person
167
+ location_postal_code: The postal code of the person's current address
168
+ location_region: The region of the person's current address
169
+ location_street_address: The person's current street address
170
+ middle_name: The person's middle name
171
+ mobile_phone: The direct-dial mobile phone associated with the person
172
+ personal_emails: All personal emails associated with the person
173
+ phone_numbers: All phone numbers associated with the person
174
+ profiles: Social profiles associated with the person
175
+ profiles.id: The profile ID (format varies based on social network)
176
+ profiles.network: The social network the profile is on
177
+ profiles.url: The profile URL
178
+ profiles.username: The profile username
179
+ recommended_personal_email: The best available email to reach a person
180
+ regions: All regions associated with the person
181
+ skills: The person's self-reported skills
182
+ street_addresses: All street addresses associated with the person
183
+ street_addresses.address_line_2: The street address line 2
184
+ street_addresses.continent: The continent the address is in
185
+ street_addresses.country: The country the address is in
186
+ street_addresses.geo: The city-center geographic coordinates of the address
187
+ street_addresses.locality: The locality the address is in
188
+ street_addresses.metro: The metro area the address is in
189
+ street_addresses.name: The location of the address in the format "locality, region, country"
190
+ street_addresses.postal_code: The postal code of the address
191
+ street_addresses.region: The region of the address
192
+ street_addresses.street_address: The street address
193
+ twitter_url: The person's Twitter profile URL based on source agreement
194
+ twitter_username: The person's Twitter profile username based on source agreement
195
+ work_email: The person's current work email
196
+ inferred_years_experience: The person's inferred years of total work experience
197
+ certifications: Any certifications the person has
198
+ certifications.end_date: The expiration date of the certification
199
+ certifications.name: Certification name
200
+ certifications.organization: The organization awarding the certification
201
+ certifications.start_date: The date the certification was awarded
202
+ headline: The brief headline associated with the person profile.
203
+ job_summary: User-inputted summary of their current job
204
+ languages: Languages the person knows
205
+ languages.name: The language
206
+ languages.proficiency: Self-ranked language proficiency from 1 (limited) to 5 (fluent)
207
+
208
+ === CANONICAL VALUES
209
+ Below are some canonical ENUM specific values that specify possible values against a particular field:
210
+
211
+ Job Classes: [general_and_administrative, research_and_development, sales_and_marketing, services, unemployed]
212
+ Job Sub Roles: [accounting, accounts, brand_marketing, broadcasting, business_development, compensation, content_marketing, customer_success, data, dental, devops, doctor, editorial, education_administration, electrical, employee_development, events, fitness, graphic_design, information_technology, instructor, investment, journalism, judicial, lawyer, logistics, marketing_communications, mechanical, media_relations, network, nursing, office_management, paralegal, pipeline, product, product_design, product_marketing, professor, project_engineering, project_management, property_management, quality_assurance, realtor, recruiting, researcher, security, software, support, systems, tax, teacher, therapy, video, web, web_design, wellness, writing]
213
+ Job Roles: [customer_service, design, education, engineering, finance, health, human_resources, legal, marketing, media, operations, public_relations, real_estate, sales, trades]
214
+ Job Levels: [cxo, director, entry, manager, owner, partner, senior, training, unpaid, vp]
215
+ Email Types: [current_professional, disposable, personal, professional]
216
+ School Types: [post-secondary institution, primary school, secondary school]
217
+ Industry types: [accounting, airlines/aviation, alternative dispute resolution, alternative medicine, animation, apparel & fashion, architecture & planning, arts and crafts, automotive, aviation & aerospace, banking, biotechnology, broadcast media, building materials, business supplies and equipment, capital markets, chemicals, civic & social organization, civil engineering, commercial real estate, computer & network security, computer games, computer hardware, computer networking, computer software, construction, consumer electronics, consumer goods, consumer services, cosmetics, dairy, defense & space, design, e-learning, education management, electrical/electronic manufacturing, entertainment, environmental services, events services, executive office, facilities services, farming, financial services, fine art, fishery, food & beverages, food production, fund-raising, furniture, gambling & casinos, glass, ceramics & concrete, government administration, government relations, graphic design, health, wellness and fitness, higher education, hospital & health care, hospitality, human resources, import and export, individual & family services, industrial automation, information services, information technology and services, insurance, international affairs, international trade and development, internet, investment banking, investment management, judiciary, law enforcement, law practice, legal services, legislative office, leisure, travel & tourism, libraries, logistics and supply chain, luxury goods & jewelry, machinery, management consulting, maritime, market research, marketing and advertising, mechanical or industrial engineering, media production, medical devices, medical practice, mental health care, military, mining & metals, motion pictures and film, museums and institutions, music, nanotechnology, newspapers, non-profit organization management, oil & energy, online media, outsourcing/offshoring, package/freight delivery, packaging and containers, paper & forest products, performing arts, pharmaceuticals, philanthropy, photography, plastics, political organization, primary/secondary education, printing, professional training & coaching, program development, public policy, public relations and communications, public safety, publishing, railroad manufacture, ranching, real estate, recreational facilities and services, religious institutions, renewables & environment, research, restaurants, retail, security and investigations, semiconductors, shipbuilding, sporting goods, sports, staffing and recruiting, supermarkets, telecommunications, textiles, think tanks, tobacco, translation and localization, transportation/trucking/railroad, utilities, venture capital & private equity, veterinary, warehousing, wholesale, wine and spirits, wireless, writing and editing]
218
+
219
+ If there is any inference from the search query that the user is searching with a particular field type that falls under the category of one of the above fields,
220
+ try to populate the "value" key with the enum values provided against the associated particular field.
221
+
222
+ === When analyzing the search query, please consider a few key points that might usually be associated with each query:
223
+
224
+ 1. Current Location
225
+ If you encounter any information related to a location that is not related/attached to a specific work experience build the field/operator/value object with keys starting with location_.
226
+ Populate country/locality/name/continent accordingly.
227
+ If you encounter an alpha-2/alpha-3 code inferring a location convert it into the corresponding name for the city/state/country before building a field/operator/value object out of it and DO NOT INCLUDE THE CODES in the object.
228
+ location_name field contains the format "locality, region, country" so if all three are inferred from the query use build only a single object with location_name field instead of separate objects for location_name, location_locality and location_country fields.
229
+ For example, for the search query: experienced software engineers from austin tx,
230
+ use the object { "field": "location_name", "operator": "=", "austin, texas, united states" } instead of { "field": "location_name", "operator": "=", "austin, tx, united states" }
231
+
232
+ 2. Work Experience
233
+ If there's any indication in the query that the candidate should have some sort of work experience in whatsoever field build the field/operator/value object with field value as experience.
234
+ For example, if the search query states 5+ years of experience the object comes out to be { "field": "experience.num_sources", operator: ">", "value": 5 } or { "field": "inferred_years_experience", operator: ">", "value": 5 }.
235
+ Another example would be if the query stated principal software engineers it would ideally be good to build field/operator/value object with value greater than 7, i.e { "field": "experience.num_sources", operator: ">", "value": 7 } or { "field": "inferred_years_experience", operator: ">", "value": 7 }.
236
+ Do not explicitly assume that an experienced software engineer means that the work experience must more than 5 years rather try to deduce it from the title if there is any in the search query.
237
+
238
+ 3. Contact information & Not Null
239
+ The main fields for mapping any sort of contact information that is found in the search query are mobile_phone and recommended_personal_email. If there's any indication
240
+ in the search query that the candidates should have some sort of contact information build the objects for those as well otherwise skip them
241
+
242
+ 4. Current Job Title/Current Company
243
+ Majority of the search queries will have some sort of job title or an indication towards the past/current field of the potential candidates search.
244
+ populate those fields against the job_title key.
245
+ And populate any sort of information from the search query about the current company against the keys starting with job_company_
246
+
247
+ === Additional analysis criteria
248
+
249
+ When selecting the field, always pick the values for the "field" key from the section specifying the possible values for it that fall under the description for the value.
250
+ For example { "field": "experience.num_sources", operator: ">", "value": 7 } is a valid object according to the schema.
251
+ On the other hand { "field": "experience", operator: ">", "value": 7 } is not
252
+
253
+ Assume that the operators will be adding up to an SQL query so make use of CONTAINS, IN, NULL and NOT NULL as operators where necessary, in which case value field should be null/array of values.
254
+ Example 1: The search query indicates that the candidates should have experience in Python and AWS
255
+ Generated Object 1: { "field": "skills", "operator": "in", "value": ["Python", "AWS"] }
256
+
257
+ Example 2: The search query indicates that the candidates should have an email and a phone number
258
+ Generated Object 2: { "field": "recommended_personal_email", "operator": "not null", "value": null }
259
+
260
+ If you are unable to generate a search criteria, please try again. Check your output and rerun the prompt if you are not satisfied with the results.
261
+
262
+ Example JSON output structure:
263
+ {
264
+ "search_criteria": [
265
+ { "field": "field1", operator: "operator1", "value": "value1" },
266
+ { "field": "field2", operator: "operator2", "value": "value2" }
267
+ ],
268
+ "keywords": {
269
+ name: "Any job title inferred from the query",
270
+ geography: "geographical location inferred from the query",
271
+ location: "location inferred from the query"
272
+ }
273
+ }
274
+ PROMPT
275
+ end
276
+ end
277
+ end
278
+ end
279
+ end
280
+ end
281
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kerplunk
4
+ module AI
5
+ module Prompts
6
+ module Templates
7
+ module Generation
8
+ # The InviteToApplyEmail class is responsible for generating a prompt for generation of invitation
9
+ # to apply email
10
+ class InviteToApplyEmail
11
+ # Generates an application invitation email prompt
12
+ def self.generate_prompt
13
+ <<~PROMPT
14
+ Respond with a RAW JSON object only. Do not include any explanatory text outside the JSON. The JSON object should have the key "email" and "subject" with a values that is a string containing valid HTML for the invite to apply email and the email subject respectively.
15
+
16
+ You are a recruiter writing a short, friendly, and slightly playful email to a passive candidate. Please include the following placeholders exactly as written:
17
+ - *first_name*
18
+ - *job_title*
19
+ - *current_company*
20
+ - *job_link*
21
+ - *industry*
22
+
23
+ Required Output Format:
24
+
25
+ 1. Subject Line:
26
+ Provide a concise subject line that entices the candidate to open the email. And include it in the response against the "subject" key
27
+
28
+ 2. Email Body:
29
+ - Greet the candidate using *first_name*.
30
+ - Mention that you saw their profile on LinkedIn.
31
+ - Highlight why they caught your eye by using a compliment.
32
+ - Introduce the opportunity for a *job_title* role.
33
+ - Mention the role is in the *industry*, but not at *current_company*.
34
+ - Indicate that the pay can go up to $150k/year.
35
+ - Invite them to apply or learn more via the link *job_link*.
36
+ - Close with a warm and friendly sign-off, using the name "Jonathan."
37
+
38
+ Tone & Style:
39
+ - Warm, authentic, and slightly playful.
40
+ - Keep it short and to the point.
41
+ - Show genuine enthusiasm for their skills.
42
+
43
+ Example JSON output structure:
44
+ {
45
+ "subject": "You’d be great at this, *first_name*!",
46
+ "email": "<p>The email body goes here....</p>"
47
+ }
48
+ PROMPT
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kerplunk
4
+ module AI
5
+ module Prompts
6
+ module Templates
7
+ module Generation
8
+ # The InviteToApplyFollowUpEmail class is responsible for generating a prompt for generation
9
+ # of a follow-up invitation email.
10
+ class InviteToApplyFollowUpEmail
11
+ # Generates an application invitation follow-up prompt
12
+ def self.generate_prompt
13
+ <<~PROMPT
14
+ Respond with a RAW JSON object only. Do not include any explanatory text outside the JSON. The JSON object should have the key "email" and "subject" with a values that is a string containing valid HTML for the invitation to apply follow up email and the email subject respectively.
15
+
16
+ You are a recruiter writing a short, friendly, and slightly playful follow-up email to a candidate previously approached for an opportunity through an email.
17
+ Please include the following placeholders exactly as written:
18
+ - *first_name*
19
+ - *job_title*
20
+ - *current_company*
21
+ - *job_link*
22
+ - *industry*
23
+
24
+ Required Output Format:
25
+
26
+ 1. Subject Line:
27
+ Provide a concise subject line that entices the candidate to open the email. And include it in the response against the "subject" key
28
+
29
+ 2. Email Body:
30
+ - Greet the candidate using *first_name*.
31
+ - Mention that you saw their profile on LinkedIn.
32
+ - Highlight why they caught your eye by using a compliment.
33
+ - Introduce the opportunity for a *job_title* role.
34
+ - Mention the role is in the *industry*, but not at *current_company*.
35
+ - Indicate that the pay can go up to $150k/year.
36
+ - Invite them to apply or learn more via the link *job_link*.
37
+ - Close with a warm and friendly sign-off, using the name "Jonathan."
38
+
39
+ Tone & Style:
40
+ - Warm, authentic, and slightly playful.
41
+ - Keep it short and to the point.
42
+ - Show genuine enthusiasm for their skills.
43
+
44
+ Example JSON output structure:
45
+ {
46
+ "subject": "Following up on an opportunity, *first_name*!",
47
+ "email": "<p>The email body goes here....</p>"
48
+ }
49
+ PROMPT
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -3,7 +3,7 @@
3
3
  module Kerplunk
4
4
  module AI
5
5
  module Prompts
6
- VERSION = "0.1.29"
6
+ VERSION = "0.1.30"
7
7
  end
8
8
  end
9
9
  end
@@ -22,7 +22,10 @@ module Kerplunk
22
22
  :interview_question_analysis,
23
23
  :interview_analysis,
24
24
  :copilot_interview_analysis,
25
- :resume_analysis
25
+ :resume_analysis,
26
+ :candidate_search_criteria,
27
+ :invite_to_apply_email,
28
+ :invite_to_apply_follow_up_email
26
29
  ]
27
30
  end
28
31
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kerplunk-ai-prompts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.29
4
+ version: 0.1.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Schutt
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-09-27 00:00:00.000000000 Z
11
+ date: 2025-02-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A collection of AI prompt templates for use in Kerplunk
14
14
  email:
@@ -33,7 +33,10 @@ files:
33
33
  - lib/kerplunk/ai/prompts/templates/analysis/interview.rb
34
34
  - lib/kerplunk/ai/prompts/templates/analysis/interview_question.rb
35
35
  - lib/kerplunk/ai/prompts/templates/analysis/resume.rb
36
+ - lib/kerplunk/ai/prompts/templates/generation/candidate_search_criteria.rb
36
37
  - lib/kerplunk/ai/prompts/templates/generation/interview_questions.rb
38
+ - lib/kerplunk/ai/prompts/templates/generation/invite_to_apply_email.rb
39
+ - lib/kerplunk/ai/prompts/templates/generation/invite_to_apply_follow_up_email.rb
37
40
  - lib/kerplunk/ai/prompts/templates/generation/job_description.rb
38
41
  - lib/kerplunk/ai/prompts/version.rb
39
42
  - sig/kerplunk/ai/prompts.rbs
@@ -45,7 +48,7 @@ metadata:
45
48
  homepage_uri: https://kerplunk.com
46
49
  source_code_uri: https://kerplunk.com
47
50
  changelog_uri: https://kerplunk.com/CHANGELOG.md
48
- post_install_message:
51
+ post_install_message:
49
52
  rdoc_options: []
50
53
  require_paths:
51
54
  - lib
@@ -61,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
64
  version: '0'
62
65
  requirements: []
63
66
  rubygems_version: 3.5.11
64
- signing_key:
67
+ signing_key:
65
68
  specification_version: 4
66
69
  summary: Kerplunk AI Prompt Templates
67
70
  test_files: []