Field SourcesPropertyKey
Carries IReadOnlyList<RagSource>, ranked, clamped and Ordinal-stamped.
It is used on both sides of the call, and that is the specified channel by which an
inner client receives the structured sources. Before invoking the inner client,
RagChatClient clones the caller's ChatOptions and sets this key on the
clone's AdditionalProperties; after the turn it sets the same key on the
ChatResponse. An inner client that wants the sources reads the request-side entry
and never re-parses the rendered text block, which exists for the model to read.
ExtractiveChatClient is the one in-box client that does so.
The clone matters: MEAI's IChatClient contract permits an implementation to mutate
the ChatOptions it is handed, so consumers must not share one across concurrent
calls - which means this client must not write into the caller's instance either.
ChatOptions.Clone() is public and shallow-copies AdditionalProperties into a
new dictionary, which is exactly the isolation needed.
A leaf that does not know this key ignores it: EdgeChatClient forwards
AdditionalProperties to GeneratorParams.SetSearchOption only for
bool and double values and skips everything else, so a RagSource list
on the request is inert rather than a failure. A third-party leaf that inspected every
property would see a documented, publicly-typed value.
public const string SourcesPropertyKey = "qavren.edge.rag.sources"
Returns
- string
- Carries IReadOnlyList<RagSource>, ranked, clamped and Ordinal-stamped. It is used on both sides of the call, and that is the specified channel by which an inner client receives the structured sources. Before invoking the inner client, RagChatClient clones the caller's ChatOptions and sets this key on the clone's AdditionalProperties; after the turn it sets the same key on the ChatResponse. An inner client that wants the sources reads the request-side entry and never re-parses the rendered text block, which exists for the model to read. ExtractiveChatClient is the one in-box client that does so. The clone matters: MEAI's IChatClient contract permits an implementation to mutate the ChatOptions it is handed, so consumers must not share one across concurrent calls - which means this client must not write into the caller's instance either. ChatOptions.Clone() is public and shallow-copies AdditionalProperties into a new dictionary, which is exactly the isolation needed. A leaf that does not know this key ignores it: EdgeChatClient forwards AdditionalProperties to GeneratorParams.SetSearchOption only for bool and double values and skips everything else, so a RagSource list on the request is inert rather than a failure. A third-party leaf that inspected every property would see a documented, publicly-typed value.