ai-engine 0.4.1 → 0.4.2

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: 0702cfaf1ad63d8a98a0b8acb67fdd0b1d3cf46320652f8f86df6b677af981ac
4
- data.tar.gz: 1adacb8b8e2ef7da675077a79950ca342df9401a62780b8955c5b785f3d32538
3
+ metadata.gz: 9f3cd77d6cd96c5e07d9b1e2627abfe022072f69a83819a3191a5bc82c96db84
4
+ data.tar.gz: d4a2b9d2d26b3c0579e2f109c11801501b1e96d49d37cd789f347d680f6c4c7e
5
5
  SHA512:
6
- metadata.gz: b1270b59cdbe033e1147cc54ca9124145d3670363ec73b51854832983ae6f1d5dc88ead7ad726d99d641b4c7a9b0d2fe4eb5b236b7c6bdcb792d44c9f175fd77
7
- data.tar.gz: 12e4f4c75a87e9f5b3c67312009906f981e01ebe340c2de3f6c8420a625bf2b7bddde7507bd9d0246747434d8ba95c5cd9cf6e4d6d1741cefdd15906d3774d6b
6
+ metadata.gz: 2b09245610c6a8ce82ba5e73dcee0b5bdc586b26c10ef5af6919894d5d8d58b3edf1b3e5c7340c2046a046bfcbc843fe35dfa447b6417ffc61c1a4b3991bdb0f
7
+ data.tar.gz: 4384746c755693decb0aef08674eed0222d4b17bb4cc63c8b0a468141242fd42b11d0a03fd719bc4378ff5df0da9dc2995d43b8f4c24d03f1abac3b90ed49120
@@ -3,10 +3,11 @@ module AI::Engine
3
3
  include RemoteIdValidatable
4
4
 
5
5
  belongs_to :threadable, polymorphic: true
6
- has_many :runs, class_name: "AI::Engine::Run", foreign_key: "ai_engine_assistant_thread_id", dependent: :nullify
7
- has_many :messages, as: :messageable, class_name: "AI::Engine::Message", foreign_key: "messageable_id", dependent: :nullify
6
+ has_many :runs, class_name: "AI::Engine::Run", foreign_key: "ai_engine_assistant_thread_id", dependent: :destroy
7
+ has_many :messages, as: :messageable, class_name: "AI::Engine::Message", foreign_key: "messageable_id", dependent: :destroy
8
8
 
9
9
  before_create :create_openai_thread
10
+ before_destroy :delete_openai_thread
10
11
 
11
12
  def run(assistant_id:, content:)
12
13
  # Create the request Message, locally and remotely on OpenAI.
@@ -28,5 +29,12 @@ module AI::Engine
28
29
  errors.add(:base, e.message)
29
30
  throw(:abort)
30
31
  end
32
+
33
+ def delete_openai_thread
34
+ AI::Engine::OpenAI::Threads::Delete.call(remote_id: remote_id)
35
+ rescue Faraday::Error => e
36
+ errors.add(:base, e.message)
37
+ throw(:abort)
38
+ end
31
39
  end
32
40
  end
@@ -1,7 +1,7 @@
1
1
  module AI::Engine
2
2
  class Chat < ApplicationRecord
3
3
  belongs_to :chattable, polymorphic: true
4
- has_many :messages, as: :messageable, class_name: "AI::Engine::Message", foreign_key: "messageable_id", dependent: :nullify
4
+ has_many :messages, as: :messageable, class_name: "AI::Engine::Message", foreign_key: "messageable_id", dependent: :destroy
5
5
 
6
6
  def run(model:)
7
7
  # Run the Chat, sending the complete message history to OpenAI.
@@ -4,10 +4,11 @@ module AI
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- has_one :assistant, as: :assistable, class_name: "AI::Engine::Assistant", dependent: :nullify
7
+ has_one :assistant, as: :assistable, class_name: "AI::Engine::Assistant", dependent: :destroy
8
8
 
9
9
  before_create :create_openai_assistant
10
10
  before_update :update_openai_assistant
11
+ before_destroy :delete_openai_assistant
11
12
 
12
13
  # Default. Override in including model to customize.
13
14
  def ai_engine_assistant
@@ -42,6 +43,13 @@ module AI
42
43
  errors.add(:base, e.message)
43
44
  throw(:abort)
44
45
  end
46
+
47
+ def delete_openai_assistant
48
+ AI::Engine::OpenAI::Assistants::Delete.call(remote_id: assistant&.remote_id)
49
+ rescue Faraday::Error => e
50
+ errors.add(:base, e.message)
51
+ throw(:abort)
52
+ end
45
53
  end
46
54
  end
47
55
  end
@@ -4,7 +4,7 @@ module AI
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- has_many :chats, as: :chattable, class_name: "AI::Engine::Chat"
7
+ has_many :chats, as: :chattable, class_name: "AI::Engine::Chat", dependent: :destroy
8
8
 
9
9
  def ai_engine_on_message_create(message:)
10
10
  # This is a hook for the AI Engine to notify the Chattable that a Message has been updated.
@@ -4,7 +4,7 @@ module AI
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- has_many :assistant_threads, as: :threadable, class_name: "AI::Engine::AssistantThread", dependent: :nullify
7
+ has_many :assistant_threads, as: :threadable, class_name: "AI::Engine::AssistantThread", dependent: :destroy
8
8
 
9
9
  def ai_engine_on_message_create(message:)
10
10
  # This is a hook for the AI Engine to notify the AssistantThreadtable that a Message has been updated.
@@ -0,0 +1,17 @@
1
+ class AI::Engine::OpenAI::Assistants::Delete
2
+ # Deletes an OpenAI Assistant by its ID.
3
+ def self.call(remote_id:)
4
+ client.assistants.delete(id: remote_id)
5
+ rescue Faraday::ResourceNotFound => e
6
+ Rails.logger.error("#{self} - #{e.response.dig(:body, "error", "message")}")
7
+ end
8
+
9
+ private_class_method def self.client
10
+ @client ||= OpenAI::Client.new(
11
+ access_token: AI::Engine::Engine.config.openai_access_token,
12
+ organization_id: AI::Engine::Engine.config.openai_organization_id,
13
+ log_errors: Rails.env.development? || Rails.env.test?,
14
+ request_timeout: 2.minutes.to_i
15
+ )
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ class AI::Engine::OpenAI::Threads::Delete
2
+ # Deletes an OpenAI Thread by its ID.
3
+ def self.call(remote_id:)
4
+ response = client.threads.delete(id: remote_id)
5
+
6
+ response["id"]
7
+ rescue Faraday::ResourceNotFound => e
8
+ Rails.logger.error("#{self} - #{e.response.dig(:body, "error", "message")}")
9
+ end
10
+
11
+ private_class_method def self.client
12
+ @client ||= OpenAI::Client.new(
13
+ access_token: AI::Engine::Engine.config.openai_access_token,
14
+ organization_id: AI::Engine::Engine.config.openai_organization_id,
15
+ log_errors: Rails.env.development? || Rails.env.test?,
16
+ request_timeout: 2.minutes.to_i
17
+ )
18
+ end
19
+ end
@@ -1,5 +1,5 @@
1
1
  module AI
2
2
  module Engine
3
- VERSION = "0.4.1"
3
+ VERSION = "0.4.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ai-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Rudall
@@ -44,6 +44,7 @@ files:
44
44
  - app/models/concerns/ai/engine/remote_id_validatable.rb
45
45
  - app/models/concerns/ai/engine/threadable.rb
46
46
  - app/services/ai/engine/openai/assistants/create.rb
47
+ - app/services/ai/engine/openai/assistants/delete.rb
47
48
  - app/services/ai/engine/openai/assistants/retrieve.rb
48
49
  - app/services/ai/engine/openai/assistants/update.rb
49
50
  - app/services/ai/engine/openai/chats/stream.rb
@@ -51,6 +52,7 @@ files:
51
52
  - app/services/ai/engine/openai/runs/create.rb
52
53
  - app/services/ai/engine/openai/runs/retrieve.rb
53
54
  - app/services/ai/engine/openai/threads/create.rb
55
+ - app/services/ai/engine/openai/threads/delete.rb
54
56
  - config/initializers/inflections.rb
55
57
  - config/initializers/openai.rb
56
58
  - db/migrate/20240528153439_create_ai_engine_assistants.rb