Skip to content

Commit 25982f8

Browse files
committed
bug #1147 [Platform] Promote metadata from unwrapped into deferred result after merge (chr-hertel)
This PR was merged into the main branch. Discussion ---------- [Platform] Promote metadata from unwrapped into deferred result after merge | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | Docs? | no | Issues | | License | MIT Was quite confusing that metadata on `DeferredResult` does not contain the metadata that gets created on converted result. Now the logic is: * `DeferredResult` can have `Metadata` * Converted `ResultInterface` can have `Metadata` * `Metadata` gets merged after conversionin `ResultInterface` => `Metadata` of `DeferredResult` wins * At the end merged `Metadata` gets promoted from `ResultInterface` instance back to `DeferredResult` * Two separated instances of `Metadata` though. Commits ------- 481a2f0 Promote metadata from unwrapped into deferred result after merge
2 parents d5a7cc5 + 481a2f0 commit 25982f8

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/platform/src/Result/DeferredResult.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,17 @@ public function getResult(): ResultInterface
5050
$this->convertedResult->setRawResult($this->rawResult);
5151
}
5252

53-
$this->convertedResult->getMetadata()->merge($this->getMetadata()->all());
53+
$metadata = $this->convertedResult->getMetadata();
54+
$metadata->merge($this->getMetadata()->all());
5455

5556
if (null !== $tokenUsageExtractor = $this->resultConverter->getTokenUsageExtractor()) {
5657
if (null !== $tokenUsage = $tokenUsageExtractor->extract($this->rawResult, $this->options)) {
57-
$this->convertedResult->getMetadata()->add('token_usage', $tokenUsage);
58+
$metadata->add('token_usage', $tokenUsage);
5859
}
5960
}
6061

62+
$this->metadata->set($metadata->all());
63+
6164
$this->isConverted = true;
6265
}
6366

src/platform/tests/Result/DeferredResultTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,18 @@ public function testItKeepsResultMetadata()
136136
$this->assertSame('value', $unwrappedResult->getMetadata()->get('key'));
137137
}
138138

139+
public function testMetadataGetsPromotedFromUnwrappedResult()
140+
{
141+
$result = new TextResult('Hello World');
142+
$result->getMetadata()->add('foo', 'bar');
143+
$converter = new PlainConverter($result);
144+
145+
$deferredResult = new DeferredResult($converter, new InMemoryRawResult());
146+
$deferredResult->getResult();
147+
148+
$this->assertSame('bar', $deferredResult->getMetadata()->get('foo'));
149+
}
150+
139151
/**
140152
* Workaround for low deps because mocking the ResponseInterface leads to an exception with
141153
* mock creation "Type Traversable|object|array|string|null contains both object and a class type"

0 commit comments

Comments
 (0)