WICG / turtledove

TURTLEDOVE
https://wicg.github.io/turtledove/
Other
526 stars 229 forks source link

Interest Group Update URL Frequency and Statefulness #619

Open thegreatfatzby opened 1 year ago

thegreatfatzby commented 1 year ago

Just a question for now, but as I think through more ways we at MSFT-Ads could put the puzzle pieces together with these APIs, one creative option (meaning not just forklifting what we do now into a different execution environment) would be to have our tech run an auction at t0 and return results that would be evaluated at t1...tN "ad display time" (where tN+1 >= tN, i.e. t1 could be the same as t0). There is something like this with "video ad podding" today, where an auction runs and an "ad pod" with multiple ads is returned, and ads display one-by-one at some point in the future (I think the cutoff is 6 hours).

One way I could see doing this would be trigger an auction for an advertisers interest group, store the results as indicated above, and then at ad render time (t1 > t0 in the above nomenclature) have the SSP code evaluate that along with any other results from first-party-context or "non pod" Fledge Auctions. The DSP code could also use them at auction time if it wants to re-evaluate somehow, maybe change order or something.

To do this we would probably need a couple of things different:

So I wanted to get thoughts on a) higher update frequency (I'll throw out once an hour as a stake in the ground) and b) some statefulness, managed by the browser and/or the IG code itself.

michaelkleber commented 1 year ago

There was some discussion in #107 of a shorter and more configurable refresh period, like 4 hours. This seems entirely reasonable, though in that case we supported the motivating use case via real-time information channels, so we never implemented shorter refreshes. If this turns out to be important to you, let us know.

I don't think I understand the statefulness that you're asking about, though. An interest group already has access at bidding time to its list of previous wins, which maybe means we already support what you want?

JensenPaul commented 1 year ago

In terms of statefulness, if you're imagining the N ads displaying back-to-back, I could imagine generateBid() returning a single bid with N component ads, with a top-level ad that cycles through the N component ads over time, but it sounds like you're considering repeatedly re-evaluating the ad choice over time which could be done via the previous wins list as Michael describes.

thegreatfatzby commented 1 year ago

Digging through docs and code to try to understand better but a few comments off the bat:

I will ponder more.

michaelkleber commented 1 year ago

I agree that some of the ideas you're chewing on might save compute cycles, but computation re-use is a constant source of privacy leaks — probably not the best place to invest our work, with an API puts a lot of work into limiting data flows.

My intuition here is that computation re-use within a single auction seems plausible; within a single page seems like an interesting idea but subject to risky race conditions; on a single site seems like suddenly we need to worry about lots of new questions; across different sites seems like too much risk to touch.

thegreatfatzby commented 1 year ago

Fair, and on the cross site thing I certainly take the point, I should just add/modify one thing, I'm less concerned about the compute for the sake of it, and more because of SLAs at various percentiles and with various oddities that will inevitably occur. So I should have said something like "compute cycles and 50/95/99/999%ile SLA preservation".