Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix memo bug, allow conversation rounds to run in parallel #503

Merged
merged 4 commits into from
Nov 20, 2023

Conversation

petersalas
Copy link
Contributor

@petersalas petersalas commented Nov 20, 2023

This change:

  • Fixes a bug where memoized streams sometimes duplicated their content
  • Refactors <Converse> to allow the rounds to run in parallel when the content allows

Copy link

vercel bot commented Nov 20, 2023

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
ai-jsx-docs ✅ Ready (Inspect) Visit Preview 💬 Add feedback Nov 20, 2023 7:03pm
ai-jsx-nextjs-demo ✅ Ready (Inspect) Visit Preview 💬 Add feedback Nov 20, 2023 7:03pm
ai-jsx-tutorial-nextjs ✅ Ready (Inspect) Visit Preview 💬 Add feedback Nov 20, 2023 7:03pm
ai-jsx-voice ✅ Ready (Inspect) Visit Preview 💬 Add feedback Nov 20, 2023 7:03pm

Copy link
Contributor

@farzadab farzadab left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I understand the difference 100% but I read it multiple times and I don't see an issue :)

@petersalas petersalas merged commit b5e4366 into main Nov 20, 2023
7 checks passed
@petersalas
Copy link
Contributor Author

Yeah it's sort of mind-bending and I have to constantly remind myself why it matters. The relevant difference between:

yield AI.AppendOnlyStream;
yield x;
yield y;

and

return [x, y]

is that in the top one, x will (might, depending on what the parent does) be rendered to completion before y starts being rendered, whereas in the second one they will render in parallel. What makes it especially mind-bending is that in this case y actually has an internal partial dependency on x. So the trick is to construct a render tree with inter-branch dependencies rather than inter-frame dependencies where possible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants