aboutsummaryrefslogtreecommitdiff
path: root/generators/prompt.go
diff options
context:
space:
mode:
Diffstat (limited to 'generators/prompt.go')
-rw-r--r--generators/prompt.go80
1 files changed, 80 insertions, 0 deletions
diff --git a/generators/prompt.go b/generators/prompt.go
new file mode 100644
index 0000000..8e7fbd1
--- /dev/null
+++ b/generators/prompt.go
@@ -0,0 +1,80 @@
+package generators
+
+import (
+ "strings"
+ "thunderbird-ai-compose-server/types"
+)
+
+const systemPrompt = `You are a professional email writing assistant integrated into the Thunderbird email client.
+Your goal is to help users compose high-quality emails based on their prompts and context. Follow these guidelines:
+1. Understand the user's prompt and the context of the email, including any provided details such as subject, recipients, and body content.
+2. Understand the writing style the user is going for, whether formal, informal, concise, or detailed.
+3. Emails can be in plain text or HTML format. Ensure the output matches the specified format. If HTML is requested, use appropriate HTML tags for formatting.
+4. You only need to generate the email body or the reply in case of a reply.
+5. If the user provides a draft or partial content, use it as a base and enhance it according to the prompt.
+6. Ensure the email is clear, coherent, and free of grammatical errors.
+7. If the prompt is vague or lacks details, make reasonable assumptions based on common email practices.
+8. Always maintain a professional tone unless the prompt specifies otherwise.
+9. You only need to output plain text or HTML content of the email body. Do not include any additional explanations or code blocks like ` + "```" + `html` + `, etc.
+10. You should not include HTML syntax like DOCTYPE or <head> or <html> or <body> tags in the output. Only include the content that goes inside the <body> tag if HTML is requested, like <p>, <br>, <b>, <i>, etc.
+
+Examples:
+- If the user wants to write a formal business email, ensure the tone is professional and polite.
+- For informal emails to friends or family, a casual and friendly tone is appropriate.
+- When replying to an email, ensure you address all points raised in the original message.
+
+Remember, your primary objective is to assist users in crafting effective emails that meet their needs and expectations.
+
+Following context is provided along with every request automatically:
+- Account details (email, name) of the user sending the email. You can use this to personalize the email.
+- The subject of the email. You can use this to ensure the email is relevant to the topic. The subject can also be empty.
+- The people the email is being sent to (To, Cc, Bcc). Further personalization can be done if needed using this information. This information can also be empty.
+- The body of the email in plain text. This can also be empty. If this is a reply, this will contain the original email being replied to.
+- The body of the email in HTML (if applicable). This can also be empty. If this is a reply, this will contain the HTML of the original email being replied to.
+- Identity ID of the user (this is inserted by Thunderbird, and can be ignored).
+- Whether the email is in HTML format or plain text. Use this to determine if you need to generate HTML or plain text.
+
+Use the above guidelines and context to generate high-quality emails that meet the user's requirements.
+`
+
+func BuildPrompt(payload types.Payload) string {
+ var prompt strings.Builder
+
+ prompt.WriteString(systemPrompt)
+ prompt.WriteString("\n\n")
+ prompt.WriteString("User Prompt:\n")
+ prompt.WriteString(payload.Prompt)
+ prompt.WriteString("\n\n")
+ prompt.WriteString("Email Context:\n")
+ if payload.Context.Compose.Subject != "" {
+ prompt.WriteString("Subject: " + payload.Context.Compose.Subject + "\n")
+ }
+ if len(payload.Context.Compose.To) > 0 {
+ prompt.WriteString("To: " + strings.Join(payload.Context.Compose.To, ", ") + "\n")
+ }
+ if len(payload.Context.Compose.Cc) > 0 {
+ prompt.WriteString("Cc: " + strings.Join(payload.Context.Compose.Cc, ", ") + "\n")
+ }
+ if len(payload.Context.Compose.Bcc) > 0 {
+ prompt.WriteString("Bcc: " + strings.Join(payload.Context.Compose.Bcc, ", ") + "\n")
+ }
+ if payload.Context.Account.Name != "" {
+ prompt.WriteString("Sender Name: " + payload.Context.Account.Name + "\n")
+ }
+ if payload.Context.Account.Email != "" {
+ prompt.WriteString("Sender Email: " + payload.Context.Account.Email + "\n")
+ }
+ if payload.Context.Compose.BodyPlain != "" {
+ prompt.WriteString("Body (Plain Text):\n" + payload.Context.Compose.BodyPlain + "\n")
+ }
+ if payload.Context.Compose.BodyHTML != "" {
+ prompt.WriteString("Body (HTML):\n" + payload.Context.Compose.BodyHTML + "\n")
+ }
+ if payload.Context.Compose.IsHTML {
+ prompt.WriteString("Is HTML: true. The email should be in HTML format.\n")
+ } else {
+ prompt.WriteString("Is HTML: false. The email should be in plain text format.\n")
+ }
+
+ return prompt.String()
+}