Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a70183429 | ||
|
|
1c35774eed | ||
|
|
9667c6c79a | ||
|
|
c743f99aa9 |
@@ -6,7 +6,7 @@
|
|||||||
# auto_resolve_duration :integer
|
# auto_resolve_duration :integer
|
||||||
# custom_attributes :jsonb
|
# custom_attributes :jsonb
|
||||||
# domain :string(100)
|
# domain :string(100)
|
||||||
# feature_flags :integer default(0), not null
|
# feature_flags :bigint default(0), not null
|
||||||
# limits :jsonb
|
# limits :jsonb
|
||||||
# locale :integer default("en")
|
# locale :integer default("en")
|
||||||
# name :string not null
|
# name :string not null
|
||||||
|
|||||||
@@ -61,3 +61,5 @@
|
|||||||
enabled: false
|
enabled: false
|
||||||
- name: insert_article_in_reply
|
- name: insert_article_in_reply
|
||||||
enabled: false
|
enabled: false
|
||||||
|
- name: openai_label_suggestions
|
||||||
|
enabled: true
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
class ChangeFeatureFlagsToBigintInAccounts < ActiveRecord::Migration[7.0]
|
||||||
|
def up
|
||||||
|
change_column :accounts, :feature_flags, :bigint
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
change_column :accounts, :feature_flags, :integer
|
||||||
|
end
|
||||||
|
end
|
||||||
+19
-3
@@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema[7.0].define(version: 2023_10_13_072802) do
|
ActiveRecord::Schema[7.0].define(version: 2023_11_14_111614) do
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "pg_stat_statements"
|
enable_extension "pg_stat_statements"
|
||||||
enable_extension "pg_trgm"
|
enable_extension "pg_trgm"
|
||||||
@@ -49,7 +49,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_13_072802) do
|
|||||||
t.integer "locale", default: 0
|
t.integer "locale", default: 0
|
||||||
t.string "domain", limit: 100
|
t.string "domain", limit: 100
|
||||||
t.string "support_email", limit: 100
|
t.string "support_email", limit: 100
|
||||||
t.integer "feature_flags", default: 0, null: false
|
t.bigint "feature_flags", default: 0, null: false
|
||||||
t.integer "auto_resolve_duration"
|
t.integer "auto_resolve_duration"
|
||||||
t.jsonb "limits", default: {}
|
t.jsonb "limits", default: {}
|
||||||
t.jsonb "custom_attributes", default: {}
|
t.jsonb "custom_attributes", default: {}
|
||||||
@@ -451,8 +451,10 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_13_072802) do
|
|||||||
t.datetime "assignee_last_seen_at", precision: nil
|
t.datetime "assignee_last_seen_at", precision: nil
|
||||||
t.datetime "first_reply_created_at", precision: nil
|
t.datetime "first_reply_created_at", precision: nil
|
||||||
t.integer "priority"
|
t.integer "priority"
|
||||||
t.bigint "sla_policy_id"
|
|
||||||
t.datetime "waiting_since"
|
t.datetime "waiting_since"
|
||||||
|
t.bigint "sla_policy_id"
|
||||||
|
t.text "summary"
|
||||||
|
t.datetime "summary_generated_at"
|
||||||
t.index ["account_id", "display_id"], name: "index_conversations_on_account_id_and_display_id", unique: true
|
t.index ["account_id", "display_id"], name: "index_conversations_on_account_id_and_display_id", unique: true
|
||||||
t.index ["account_id", "id"], name: "index_conversations_on_id_and_account_id"
|
t.index ["account_id", "id"], name: "index_conversations_on_id_and_account_id"
|
||||||
t.index ["account_id", "inbox_id", "status", "assignee_id"], name: "conv_acid_inbid_stat_asgnid_idx"
|
t.index ["account_id", "inbox_id", "status", "assignee_id"], name: "conv_acid_inbid_stat_asgnid_idx"
|
||||||
@@ -617,6 +619,19 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_13_072802) do
|
|||||||
t.jsonb "settings", default: {}
|
t.jsonb "settings", default: {}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "label_associations", force: :cascade do |t|
|
||||||
|
t.bigint "label_id", null: false
|
||||||
|
t.string "labelable_type", null: false
|
||||||
|
t.bigint "labelable_id", null: false
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["label_id"], name: "index_label_associations_on_label_id"
|
||||||
|
t.index ["labelable_type", "labelable_id"], name: "index_label_associations_on_contact", where: "((labelable_type)::text = 'Contact'::text)"
|
||||||
|
t.index ["labelable_type", "labelable_id"], name: "index_label_associations_on_conversation", where: "((labelable_type)::text = 'Conversation'::text)"
|
||||||
|
t.index ["labelable_type", "labelable_id"], name: "index_label_associations_on_labelable"
|
||||||
|
t.index ["labelable_type", "labelable_id"], name: "index_label_associations_on_labelable_type_and_labelable_id"
|
||||||
|
end
|
||||||
|
|
||||||
create_table "labels", force: :cascade do |t|
|
create_table "labels", force: :cascade do |t|
|
||||||
t.string "title"
|
t.string "title"
|
||||||
t.text "description"
|
t.text "description"
|
||||||
@@ -946,6 +961,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_10_13_072802) do
|
|||||||
add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
|
add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
|
||||||
add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id"
|
add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id"
|
||||||
add_foreign_key "inboxes", "portals"
|
add_foreign_key "inboxes", "portals"
|
||||||
|
add_foreign_key "label_associations", "labels"
|
||||||
create_trigger("accounts_after_insert_row_tr", :generated => true, :compatibility => 1).
|
create_trigger("accounts_after_insert_row_tr", :generated => true, :compatibility => 1).
|
||||||
on("accounts").
|
on("accounts").
|
||||||
after(:insert).
|
after(:insert).
|
||||||
|
|||||||
@@ -19,13 +19,7 @@ module Enterprise::Integrations::OpenaiProcessorService
|
|||||||
private
|
private
|
||||||
|
|
||||||
def labels_with_messages
|
def labels_with_messages
|
||||||
conversation = find_conversation
|
return nil unless valid_conversation?
|
||||||
|
|
||||||
# return nil if conversation is not present
|
|
||||||
return nil if conversation.nil?
|
|
||||||
|
|
||||||
# return nil if conversation has less than 3 incoming messages
|
|
||||||
return nil if conversation.messages.incoming.count < 3
|
|
||||||
|
|
||||||
labels = hook.account.labels.pluck(:title).join(', ')
|
labels = hook.account.labels.pluck(:title).join(', ')
|
||||||
character_count = labels.length
|
character_count = labels.length
|
||||||
@@ -38,6 +32,20 @@ module Enterprise::Integrations::OpenaiProcessorService
|
|||||||
"Messages:\n#{messages}\nLabels:\n#{labels}"
|
"Messages:\n#{messages}\nLabels:\n#{labels}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def valid_conversation?
|
||||||
|
conversation = find_conversation
|
||||||
|
return false if conversation.nil?
|
||||||
|
return false if conversation.messages.incoming.count < 3
|
||||||
|
|
||||||
|
# Think Mark think, at this point the conversation is beyond saving
|
||||||
|
return false if conversation.messages.count > 100
|
||||||
|
|
||||||
|
# if there are more than 20 messages, only trigger this if the last message is from the client
|
||||||
|
return false if conversation.messages.count > 20 && !conversation.messages.last.incoming?
|
||||||
|
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
def summarize_body
|
def summarize_body
|
||||||
{
|
{
|
||||||
model: self.class::GPT_MODEL,
|
model: self.class::GPT_MODEL,
|
||||||
@@ -50,8 +58,10 @@ module Enterprise::Integrations::OpenaiProcessorService
|
|||||||
end
|
end
|
||||||
|
|
||||||
def label_suggestion_body
|
def label_suggestion_body
|
||||||
|
return unless label_suggestions_enabled?
|
||||||
|
|
||||||
content = labels_with_messages
|
content = labels_with_messages
|
||||||
return nil if content.blank?
|
return value_from_cache if content.blank?
|
||||||
|
|
||||||
{
|
{
|
||||||
model: self.class::GPT_MODEL,
|
model: self.class::GPT_MODEL,
|
||||||
@@ -64,4 +74,8 @@ module Enterprise::Integrations::OpenaiProcessorService
|
|||||||
]
|
]
|
||||||
}.to_json
|
}.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def label_suggestions_enabled?
|
||||||
|
hook.account.feature_enabled?(:openai_label_suggestions)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user