Skip to content

Commit 053256b

Browse files
author
Nicholas Newberry
committed
link ApiCalls with Conversations
1 parent 32f715f commit 053256b

13 files changed

Lines changed: 36 additions & 25 deletions

app/lib/chromadb/client.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ module Chromadb
44
class Client
55
attr_reader :last_response
66

7-
def initialize(host = nil, port = nil)
7+
def initialize(host = nil, port = nil, traceable: nil)
88
@host = host || ENV.fetch("CHROMADB_HOST") { "localhost" }
99
@port = port || ENV.fetch("CHROMADB_PORT") { 8000 }
10+
@traceable = traceable
11+
1012
@url = "http://#{@host}:#{@port}"
1113
end
1214

@@ -137,7 +139,7 @@ def delete(path)
137139
end
138140

139141
def store_api_call(service_name, response)
140-
ApiCall.from_httparty(service_name, response).save!
142+
ApiCall.from_httparty(service_name, response, @traceable).save!
141143
end
142144
end
143145
end

app/models/api_call.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class ApiCall < ApplicationRecord
2-
belongs_to :traceable, optional: true
2+
belongs_to :traceable, polymorphic: true, optional: true
33

44
enum http_method: { get: 0, post: 1, put: 2, delete: 3, patch: 4, head: 5 }, _prefix: :http_method
55

app/models/conversation.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ class Conversation < ApplicationRecord
44
has_many :messages, dependent: :destroy
55
has_many :conversation_collections, dependent: :destroy
66
has_many :collections, through: :conversation_collections, dependent: :destroy
7+
has_many :api_calls, as: :traceable, dependent: :destroy
78

89
include Turbo::Broadcastable
910

app/models/message.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ class Message < ApplicationRecord
22
belongs_to :conversation
33
belongs_to :author, polymorphic: true
44
has_one :user, through: :conversation
5+
has_many :api_calls, as: :traceable, dependent: :destroy
56

67
include Turbo::Broadcastable
78

@@ -20,10 +21,6 @@ class Message < ApplicationRecord
2021
target: "message_#{id}",
2122
partial: "messages/message"
2223
)
23-
broadcast_action_to(
24-
user_dom_id("conversations"),
25-
action: "scroll_to_bottom"
26-
)
2724
}
2825

2926
def previous(count = 1)

app/services/api/search.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ class SearchError < StandardError; end
44

55
include Rails.application.routes.url_helpers
66

7-
def initialize(collection, base_url: nil, browser_base_url: nil)
7+
def initialize(collection, base_url: nil, browser_base_url: nil, traceable: nil)
88
@collection = collection
99
@base_url = base_url
1010
@browser_base_url = URI(browser_base_url)
11+
@traceable = traceable
1112
end
1213

1314
def search(query)
@@ -103,7 +104,7 @@ def collection_id
103104
end
104105

105106
def embedder
106-
@embedder ||= Embedder.new(@collection.embedding_model)
107+
@embedder ||= Embedder.new(@collection.embedding_model, traceable: @traceable)
107108
end
108109

109110
def chroma

app/services/embedder.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
class Embedder
2-
def initialize(embedding_model)
2+
def initialize(embedding_model, traceable: nil)
33
@embedding_model = embedding_model
4+
@traceable = traceable
45
end
56

67
def embed(text)
@@ -15,7 +16,8 @@ def client
1516
@client ||= LlmClients::Ollama::Client.new(
1617
endpoint:,
1718
api_key: "todo",
18-
embedding_model: @embedding_model.model
19+
embedding_model: @embedding_model.model,
20+
traceable: @traceable
1921
)
2022
end
2123

app/services/reply_to_message.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,16 @@ def streamer
8787
@streamer ||= ResponseStreamer.new(
8888
endpoint: ModelServer.active_server.url,
8989
model: model_config.model,
90-
provider: ModelServer.active_server.provider
90+
provider: ModelServer.active_server.provider,
91+
traceable: @conversation
9192
)
9293
end
9394

9495
def searcher
9596
@searcher ||= Search::SearchMultiple.new(
9697
collections_to_search,
97-
num_results: Setting.get(:num_chunks_to_include)
98+
num_results: Setting.get(:num_chunks_to_include),
99+
traceable: @conversation
98100
)
99101
end
100102

app/services/response_streamer.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ class UnsupportedServerError < ResponseStreamerError; end
1313

1414
BATCH_SIZE = 16
1515

16-
def initialize(endpoint:, model:, provider:, api_key: nil)
16+
def initialize(endpoint:, model:, provider:, api_key: nil, traceable: nil)
1717
@endpoint = endpoint
1818
@model = model
1919
@provider = provider
2020
@api_key = api_key
21+
@traceable = traceable
2122

2223
@chunk = ""
2324
end
@@ -63,7 +64,8 @@ def client
6364
endpoint: @endpoint,
6465
api_key: @api_key,
6566
model: @model,
66-
batch_size: BATCH_SIZE
67+
batch_size: BATCH_SIZE,
68+
traceable: @traceable
6769
)
6870
end
6971
end

app/services/search/search.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
module Search
22
class Search < Base
3-
def initialize(collection)
3+
def initialize(collection, traceable: nil)
44
@collection = collection
5+
@traceable = traceable
56

67
super()
78
end
@@ -62,11 +63,11 @@ def collection_id
6263
end
6364

6465
def embedder
65-
@embedder ||= Embedder.new(@collection.embedding_model)
66+
@embedder ||= Embedder.new(@collection.embedding_model, traceable: @traceable)
6667
end
6768

6869
def chroma
69-
@chroma ||= Chromadb::Client.new
70+
@chroma ||= Chromadb::Client.new(traceable: @traceable)
7071
end
7172
end
7273
end

app/services/search/search_multiple.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
module Search
22
class SearchMultiple < Base
3-
def initialize(collections, num_results: 10)
3+
def initialize(collections, num_results: 10, traceable: nil)
44
@collections = collections
55
@num_results = num_results
6+
@traceable = traceable
67

78
super()
89
end
@@ -19,7 +20,7 @@ def search(query, &)
1920

2021
def searchers
2122
@searchers ||= @collections.map do |collection|
22-
Search.new(collection)
23+
Search.new(collection, traceable: @traceable)
2324
end
2425
end
2526
end

0 commit comments

Comments
 (0)