Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9b43d4f952 | ||
|
|
6f307c2fab |
@@ -191,10 +191,10 @@ gem 'reverse_markdown'
|
|||||||
|
|
||||||
gem 'iso-639'
|
gem 'iso-639'
|
||||||
gem 'ruby-openai'
|
gem 'ruby-openai'
|
||||||
gem 'ai-agents', '>= 0.7.0'
|
gem 'ai-agents', '>= 0.8.0'
|
||||||
|
|
||||||
# TODO: Move this gem as a dependency of ai-agents
|
# TODO: Move this gem as a dependency of ai-agents
|
||||||
gem 'ruby_llm', '>= 1.8.2'
|
gem 'ruby_llm', '>= 1.9.1'
|
||||||
gem 'ruby_llm-schema'
|
gem 'ruby_llm-schema'
|
||||||
|
|
||||||
# OpenTelemetry for LLM observability
|
# OpenTelemetry for LLM observability
|
||||||
|
|||||||
+18
-18
@@ -126,8 +126,8 @@ GEM
|
|||||||
jbuilder (~> 2)
|
jbuilder (~> 2)
|
||||||
rails (>= 4.2, < 7.2)
|
rails (>= 4.2, < 7.2)
|
||||||
selectize-rails (~> 0.6)
|
selectize-rails (~> 0.6)
|
||||||
ai-agents (0.7.0)
|
ai-agents (0.8.0)
|
||||||
ruby_llm (~> 1.8.2)
|
ruby_llm (~> 1.9.1)
|
||||||
annotaterb (4.20.0)
|
annotaterb (4.20.0)
|
||||||
activerecord (>= 6.0.0)
|
activerecord (>= 6.0.0)
|
||||||
activesupport (>= 6.0.0)
|
activesupport (>= 6.0.0)
|
||||||
@@ -297,7 +297,7 @@ GEM
|
|||||||
railties (>= 5.0.0)
|
railties (>= 5.0.0)
|
||||||
faker (3.2.0)
|
faker (3.2.0)
|
||||||
i18n (>= 1.8.11, < 2)
|
i18n (>= 1.8.11, < 2)
|
||||||
faraday (2.13.1)
|
faraday (2.14.0)
|
||||||
faraday-net_http (>= 2.0, < 3.5)
|
faraday-net_http (>= 2.0, < 3.5)
|
||||||
json
|
json
|
||||||
logger
|
logger
|
||||||
@@ -306,14 +306,14 @@ GEM
|
|||||||
faraday-mashify (1.0.0)
|
faraday-mashify (1.0.0)
|
||||||
faraday (~> 2.0)
|
faraday (~> 2.0)
|
||||||
hashie
|
hashie
|
||||||
faraday-multipart (1.0.4)
|
faraday-multipart (1.2.0)
|
||||||
multipart-post (~> 2)
|
multipart-post (~> 2.0)
|
||||||
faraday-net_http (3.4.0)
|
faraday-net_http (3.4.2)
|
||||||
net-http (>= 0.5.0)
|
net-http (~> 0.5)
|
||||||
faraday-net_http_persistent (2.1.0)
|
faraday-net_http_persistent (2.1.0)
|
||||||
faraday (~> 2.5)
|
faraday (~> 2.5)
|
||||||
net-http-persistent (~> 4.0)
|
net-http-persistent (~> 4.0)
|
||||||
faraday-retry (2.2.1)
|
faraday-retry (2.4.0)
|
||||||
faraday (~> 2.0)
|
faraday (~> 2.0)
|
||||||
faraday_middleware-aws-sigv4 (1.0.1)
|
faraday_middleware-aws-sigv4 (1.0.1)
|
||||||
aws-sigv4 (~> 1.0)
|
aws-sigv4 (~> 1.0)
|
||||||
@@ -463,7 +463,7 @@ GEM
|
|||||||
rails-dom-testing (>= 1, < 3)
|
rails-dom-testing (>= 1, < 3)
|
||||||
railties (>= 4.2.0)
|
railties (>= 4.2.0)
|
||||||
thor (>= 0.14, < 2.0)
|
thor (>= 0.14, < 2.0)
|
||||||
json (2.13.2)
|
json (2.18.0)
|
||||||
json_refs (0.1.8)
|
json_refs (0.1.8)
|
||||||
hana
|
hana
|
||||||
json_schemer (0.2.24)
|
json_schemer (0.2.24)
|
||||||
@@ -538,7 +538,7 @@ GEM
|
|||||||
net-imap
|
net-imap
|
||||||
net-pop
|
net-pop
|
||||||
net-smtp
|
net-smtp
|
||||||
marcel (1.0.4)
|
marcel (1.1.0)
|
||||||
maxminddb (0.1.22)
|
maxminddb (0.1.22)
|
||||||
meta_request (0.8.3)
|
meta_request (0.8.3)
|
||||||
rack-contrib (>= 1.1, < 3)
|
rack-contrib (>= 1.1, < 3)
|
||||||
@@ -556,12 +556,12 @@ GEM
|
|||||||
msgpack (1.8.0)
|
msgpack (1.8.0)
|
||||||
multi_json (1.15.0)
|
multi_json (1.15.0)
|
||||||
multi_xml (0.6.0)
|
multi_xml (0.6.0)
|
||||||
multipart-post (2.3.0)
|
multipart-post (2.4.1)
|
||||||
mutex_m (0.3.0)
|
mutex_m (0.3.0)
|
||||||
neighbor (0.2.3)
|
neighbor (0.2.3)
|
||||||
activerecord (>= 5.2)
|
activerecord (>= 5.2)
|
||||||
net-http (0.6.0)
|
net-http (0.9.1)
|
||||||
uri
|
uri (>= 0.11.1)
|
||||||
net-http-persistent (4.0.2)
|
net-http-persistent (4.0.2)
|
||||||
connection_pool (~> 2.2)
|
connection_pool (~> 2.2)
|
||||||
net-imap (0.4.20)
|
net-imap (0.4.20)
|
||||||
@@ -822,7 +822,7 @@ GEM
|
|||||||
ruby2ruby (2.5.0)
|
ruby2ruby (2.5.0)
|
||||||
ruby_parser (~> 3.1)
|
ruby_parser (~> 3.1)
|
||||||
sexp_processor (~> 4.6)
|
sexp_processor (~> 4.6)
|
||||||
ruby_llm (1.8.2)
|
ruby_llm (1.9.1)
|
||||||
base64
|
base64
|
||||||
event_stream_parser (~> 1)
|
event_stream_parser (~> 1)
|
||||||
faraday (>= 1.10.0)
|
faraday (>= 1.10.0)
|
||||||
@@ -966,7 +966,7 @@ GEM
|
|||||||
unicode-emoji (~> 4.0, >= 4.0.4)
|
unicode-emoji (~> 4.0, >= 4.0.4)
|
||||||
unicode-emoji (4.0.4)
|
unicode-emoji (4.0.4)
|
||||||
uniform_notifier (1.17.0)
|
uniform_notifier (1.17.0)
|
||||||
uri (1.0.4)
|
uri (1.1.1)
|
||||||
uri_template (0.7.0)
|
uri_template (0.7.0)
|
||||||
valid_email2 (5.2.6)
|
valid_email2 (5.2.6)
|
||||||
activemodel (>= 3.2)
|
activemodel (>= 3.2)
|
||||||
@@ -1001,7 +1001,7 @@ GEM
|
|||||||
working_hours (1.4.1)
|
working_hours (1.4.1)
|
||||||
activesupport (>= 3.2)
|
activesupport (>= 3.2)
|
||||||
tzinfo
|
tzinfo
|
||||||
zeitwerk (2.6.17)
|
zeitwerk (2.7.4)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
arm64-darwin-20
|
arm64-darwin-20
|
||||||
@@ -1021,7 +1021,7 @@ DEPENDENCIES
|
|||||||
administrate (>= 0.20.1)
|
administrate (>= 0.20.1)
|
||||||
administrate-field-active_storage (>= 1.0.3)
|
administrate-field-active_storage (>= 1.0.3)
|
||||||
administrate-field-belongs_to_search (>= 0.9.0)
|
administrate-field-belongs_to_search (>= 0.9.0)
|
||||||
ai-agents (>= 0.7.0)
|
ai-agents (>= 0.8.0)
|
||||||
annotaterb
|
annotaterb
|
||||||
attr_extras
|
attr_extras
|
||||||
audited (~> 5.4, >= 5.4.1)
|
audited (~> 5.4, >= 5.4.1)
|
||||||
@@ -1123,7 +1123,7 @@ DEPENDENCIES
|
|||||||
rubocop-rails
|
rubocop-rails
|
||||||
rubocop-rspec
|
rubocop-rspec
|
||||||
ruby-openai
|
ruby-openai
|
||||||
ruby_llm (>= 1.8.2)
|
ruby_llm (>= 1.9.1)
|
||||||
ruby_llm-schema
|
ruby_llm-schema
|
||||||
scout_apm
|
scout_apm
|
||||||
scss_lint
|
scss_lint
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ class Captain::Llm::ContactAttributesService < Llm::BaseAiService
|
|||||||
model: @model,
|
model: @model,
|
||||||
temperature: @temperature,
|
temperature: @temperature,
|
||||||
account_id: @conversation.account_id,
|
account_id: @conversation.account_id,
|
||||||
|
conversation_id: @conversation.display_id,
|
||||||
feature_name: 'contact_attributes',
|
feature_name: 'contact_attributes',
|
||||||
messages: [
|
messages: [
|
||||||
{ role: 'system', content: system_prompt },
|
{ role: 'system', content: system_prompt },
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class Messages::AudioTranscriptionService< Llm::LegacyBaseOpenAiService
|
class Messages::AudioTranscriptionService
|
||||||
include Integrations::LlmInstrumentation
|
include Integrations::LlmInstrumentation
|
||||||
|
|
||||||
WHISPER_MODEL = 'whisper-1'.freeze
|
WHISPER_MODEL = 'whisper-1'.freeze
|
||||||
@@ -6,7 +6,7 @@ class Messages::AudioTranscriptionService< Llm::LegacyBaseOpenAiService
|
|||||||
attr_reader :attachment, :message, :account
|
attr_reader :attachment, :message, :account
|
||||||
|
|
||||||
def initialize(attachment)
|
def initialize(attachment)
|
||||||
super()
|
Llm::Config.initialize!
|
||||||
@attachment = attachment
|
@attachment = attachment
|
||||||
@message = attachment.message
|
@message = attachment.message
|
||||||
@account = message.account
|
@account = message.account
|
||||||
@@ -50,23 +50,18 @@ class Messages::AudioTranscriptionService< Llm::LegacyBaseOpenAiService
|
|||||||
|
|
||||||
temp_file_path = fetch_audio_file
|
temp_file_path = fetch_audio_file
|
||||||
|
|
||||||
transcribed_text = nil
|
transcription = instrument_audio_transcription(instrumentation_params(temp_file_path)) do
|
||||||
|
RubyLLM.transcribe(temp_file_path, model: WHISPER_MODEL)
|
||||||
File.open(temp_file_path, 'rb') do |file|
|
|
||||||
response = @client.audio.transcribe(
|
|
||||||
parameters: {
|
|
||||||
model: 'whisper-1',
|
|
||||||
file: file,
|
|
||||||
temperature: 0.4
|
|
||||||
}
|
|
||||||
)
|
|
||||||
transcribed_text = response['text']
|
|
||||||
end
|
end
|
||||||
|
|
||||||
FileUtils.rm_f(temp_file_path)
|
FileUtils.rm_f(temp_file_path)
|
||||||
|
|
||||||
update_transcription(transcribed_text)
|
update_transcription(transcription.text)
|
||||||
transcribed_text
|
transcription.text
|
||||||
|
rescue RubyLLM::Error => e
|
||||||
|
FileUtils.rm_f(temp_file_path) if temp_file_path
|
||||||
|
Rails.logger.error "Audio transcription error: #{e.message}"
|
||||||
|
raise
|
||||||
end
|
end
|
||||||
|
|
||||||
def instrumentation_params(file_path)
|
def instrumentation_params(file_path)
|
||||||
@@ -74,6 +69,7 @@ class Messages::AudioTranscriptionService< Llm::LegacyBaseOpenAiService
|
|||||||
span_name: 'llm.messages.audio_transcription',
|
span_name: 'llm.messages.audio_transcription',
|
||||||
model: WHISPER_MODEL,
|
model: WHISPER_MODEL,
|
||||||
account_id: account&.id,
|
account_id: account&.id,
|
||||||
|
conversation_id: message.conversation&.display_id,
|
||||||
feature_name: 'audio_transcription',
|
feature_name: 'audio_transcription',
|
||||||
file_path: file_path
|
file_path: file_path
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user