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
3 changed files with 12 additions and 2 deletions
+1 -1
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
@@ -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"}
@@ -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