FIX: Don't check for #blank? when manipulating chunks (#1428)

This commit is contained in:
Roman Rizzi 2025-06-11 20:38:58 -03:00 committed by GitHub
parent 26217e51f9
commit 8c8fd969ef
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 12 additions and 2 deletions

View File

@ -74,7 +74,7 @@ module DiscourseAi
private
def try_escape_and_parse(raw_json)
if raw_json.blank? || !raw_json.is_a?(String)
if !raw_json.is_a?(String)
@broken = true
return
end

View File

@ -544,7 +544,9 @@ RSpec.describe DiscourseAi::Completions::Endpoints::Gemini do
data: {"candidates": [{"content": {"parts": [{"text": "Hello!"}],"role": "model"},"finishReason": "STOP"}],"usageMetadata": {"promptTokenCount": 399,"candidatesTokenCount": 191,"totalTokenCount": 590},"modelVersion": "gemini-1.5-pro-002"}
data: {"candidates": [{"content": {"parts": [{"text": "\\n there"}],"role": "model"},"finishReason": "STOP"}],"usageMetadata": {"promptTokenCount": 399,"candidatesTokenCount": 191,"totalTokenCount": 590},"modelVersion": "gemini-1.5-pro-002"}
data: {"candidates": [{"content": {"parts": [{"text": "\\n "}],"role": "model"},"finishReason": "STOP"}],"usageMetadata": {"promptTokenCount": 399,"candidatesTokenCount": 191,"totalTokenCount": 590},"modelVersion": "gemini-1.5-pro-002"}
data: {"candidates": [{"content": {"parts": [{"text": "there"}],"role": "model"},"finishReason": "STOP"}],"usageMetadata": {"promptTokenCount": 399,"candidatesTokenCount": 191,"totalTokenCount": 590},"modelVersion": "gemini-1.5-pro-002"}
data: {"candidates": [{"content": {"parts": [{"text": "\\","}],"role": "model"},"finishReason": "STOP"}],"usageMetadata": {"promptTokenCount": 399,"candidatesTokenCount": 191,"totalTokenCount": 590},"modelVersion": "gemini-1.5-pro-002"}

View File

@ -112,6 +112,14 @@ RSpec.describe DiscourseAi::Completions::StructuredOutput do
["Hello! I am a chunk", "There"],
)
end
it "handles empty newline chunks" do
chunks = [+"{\"", +"message", +"\":\"", +"Hello!", +"\n", +"\"", +"}"]
chunks.each { |c| structured_output << c }
expect(structured_output.read_buffered_property(:message)).to eq("Hello!\n")
end
end
describe "dealing with non-JSON responses" do