From 64ddb2ed5ccf68ae059338d57dc74f8551adf492 Mon Sep 17 00:00:00 2001 From: Antar Azri Date: Fri, 15 Nov 2024 15:03:30 +0100 Subject: [PATCH 1/5] feat: add log probabilities to OpenAI --- lib/llm/message.rb | 5 +++-- lib/llm/providers/openai/response_parser.rb | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/llm/message.rb b/lib/llm/message.rb index 8b41cd1b..556fc064 100644 --- a/lib/llm/message.rb +++ b/lib/llm/message.rb @@ -2,11 +2,12 @@ module LLM class Message - attr_accessor :role, :content + attr_accessor :role, :content, :logprobs, :top_logprobs - def initialize(role, content) + def initialize(role, content, logprobs: nil) @role = role @content = content + @logprobs = logprobs end def to_h diff --git a/lib/llm/providers/openai/response_parser.rb b/lib/llm/providers/openai/response_parser.rb index 79be36bb..81118684 100644 --- a/lib/llm/providers/openai/response_parser.rb +++ b/lib/llm/providers/openai/response_parser.rb @@ -19,7 +19,7 @@ def parse_completion(raw) { model: raw["model"], choices: raw["choices"].map do - LLM::Message.new(*_1["message"].values_at("role", "content")) + LLM::Message.new(*_1["message"].values_at("role", "content"), logprobs: _1["logprobs"]) end, prompt_tokens: raw.dig("usage", "prompt_tokens"), completion_tokens: raw.dig("usage", "completion_tokens"), From 1a8eefb2b857d7f5fe72f72c39a1bed9c5a0a592 Mon Sep 17 00:00:00 2001 From: Antar Azri Date: Sun, 17 Nov 2024 20:09:53 +0100 Subject: [PATCH 2/5] fixup! feat: add log probabilities to OpenAI --- lib/llm/message.rb | 10 +++++++--- lib/llm/providers/openai/response_parser.rb | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/llm/message.rb b/lib/llm/message.rb index 556fc064..3a9d8dc4 100644 --- a/lib/llm/message.rb +++ b/lib/llm/message.rb @@ -2,12 +2,16 @@ module LLM class Message - attr_accessor :role, :content, :logprobs, :top_logprobs + attr_accessor :role, :content - def initialize(role, content, logprobs: nil) + def initialize(role, content, extra = nil) @role = role @content = content - @logprobs = logprobs + @extra = extra + end + + def logprobs + extra[:logprobs] end def to_h diff --git a/lib/llm/providers/openai/response_parser.rb b/lib/llm/providers/openai/response_parser.rb index 81118684..87e0022e 100644 --- a/lib/llm/providers/openai/response_parser.rb +++ b/lib/llm/providers/openai/response_parser.rb @@ -19,7 +19,7 @@ def parse_completion(raw) { model: raw["model"], choices: raw["choices"].map do - LLM::Message.new(*_1["message"].values_at("role", "content"), logprobs: _1["logprobs"]) + LLM::Message.new(*_1["message"].values_at("role", "content"), {logprobs: _1["logprobs"]}) end, prompt_tokens: raw.dig("usage", "prompt_tokens"), completion_tokens: raw.dig("usage", "completion_tokens"), From b03fecb16cd72cf2344d650c62d6c5a4fcace03a Mon Sep 17 00:00:00 2001 From: Antar Azri Date: Sun, 17 Nov 2024 20:16:18 +0100 Subject: [PATCH 3/5] fixup! feat: add log probabilities to OpenAI --- lib/llm/message.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/llm/message.rb b/lib/llm/message.rb index 3a9d8dc4..1607c1e0 100644 --- a/lib/llm/message.rb +++ b/lib/llm/message.rb @@ -4,7 +4,7 @@ module LLM class Message attr_accessor :role, :content - def initialize(role, content, extra = nil) + def initialize(role, content, extra = {}) @role = role @content = content @extra = extra From 3134b35c9d248bbf749906a17db33f71915b182f Mon Sep 17 00:00:00 2001 From: Antar Azri Date: Sun, 17 Nov 2024 20:25:08 +0100 Subject: [PATCH 4/5] fixup! feat: add log probabilities to OpenAI --- lib/llm/message.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/llm/message.rb b/lib/llm/message.rb index 1607c1e0..1668ecd8 100644 --- a/lib/llm/message.rb +++ b/lib/llm/message.rb @@ -11,7 +11,7 @@ def initialize(role, content, extra = {}) end def logprobs - extra[:logprobs] + @extra[:logprobs] end def to_h From ac733ccbb2b10457f821064eb8830dd7786616f7 Mon Sep 17 00:00:00 2001 From: Antar Azri Date: Sun, 17 Nov 2024 20:27:52 +0100 Subject: [PATCH 5/5] feat: track the corresponding completion for message --- lib/llm/providers/openai/response_parser.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/llm/providers/openai/response_parser.rb b/lib/llm/providers/openai/response_parser.rb index 87e0022e..0f6952e4 100644 --- a/lib/llm/providers/openai/response_parser.rb +++ b/lib/llm/providers/openai/response_parser.rb @@ -19,7 +19,7 @@ def parse_completion(raw) { model: raw["model"], choices: raw["choices"].map do - LLM::Message.new(*_1["message"].values_at("role", "content"), {logprobs: _1["logprobs"]}) + LLM::Message.new(*_1["message"].values_at("role", "content"), {completion: self, logprobs: _1["logprobs"]}) end, prompt_tokens: raw.dig("usage", "prompt_tokens"), completion_tokens: raw.dig("usage", "completion_tokens"),