Repository navigation
Sam/call fn - #3592
Sam/call fn#3592sxlijin wants to merge 5 commits into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughRefactors VM native-call model into separate call and continuation frames, converts sys-op execution to a frame-based request/completion protocol, updates engine host-call and error routing to capture VM stack traces, and moves final protobuf encoding from the C-FFI bridge into SDK boundaries. ChangesNative entry, VM frame model, sys-op protocol, error handling, and bridge encoding
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0fdeef7514
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| let bytes = match encoded { | ||
| Ok(bytes) => bytes, | ||
| let bytes = match outbound { | ||
| Ok(result) => result.encode_to_vec(), |
There was a problem hiding this comment.
Keep encoding inside the C-ABI panic guard
When BamlOutboundResult::encode_to_vec() panics in this C-ABI async path, the panic is now outside the AssertUnwindSafe(...).catch_unwind() scope because call_and_encode returns the unencoded result; the spawned task will panic before send_outbound_result_to_callback, so the host never receives the promised SdkPanic envelope. This regresses the safety net described in this block for encode-stage panics; wrap the encoding itself in the catch boundary or move it back into the guarded future.
Useful? React with 👍 / 👎.
This comment has been minimized.
This comment has been minimized.
Binary size checks passed✅ 7 passed
Generated by |
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
baml_language/crates/bridge_cffi/src/lib.rs (1)
190-201:⚠️ Potential issue | 🟠 Major | ⚡ Quick win
catch_unwindno longer protects the encoding step.On Line 199-Line 201,
.encode_to_vec()runs after the unwind boundary from Line 190-Line 197. If encoding panics, this path can exit beforesend_outbound_result_to_callback, so the caller may not receive an envelope response.💡 Proposed fix
- let outbound = AssertUnwindSafe(call_and_encode( - runtime, - func_name, - kwargs.into(), - call_ctx.build(), - )) - .catch_unwind() - .await; - - let bytes = match outbound { - Ok(result) => result.encode_to_vec(), + let bytes = match AssertUnwindSafe(async { + call_and_encode(runtime, func_name, kwargs.into(), call_ctx.build()) + .await + .encode_to_vec() + }) + .catch_unwind() + .await + { + Ok(bytes) => bytes, // An encode-stage panic also rides the envelope as an `SdkPanic`, // uniform with every other result. Err(panic_info) => baml_to_host::panic_to_outbound(panic_info.as_ref()), };🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@baml_language/crates/bridge_cffi/src/lib.rs` around lines 190 - 201, The encoding step (.encode_to_vec()) currently runs outside the AssertUnwindSafe(...).catch_unwind() boundary so an encode-time panic can bypass send_outbound_result_to_callback; move the encode work into the protected unwind boundary by ensuring call_and_encode (or the closure passed to AssertUnwindSafe) returns the already-encoded Vec<u8> (or call encode_to_vec() inside that AssertUnwindSafe closure) so that the match on outbound handles both successful encoded bytes and panics and always routes through send_outbound_result_to_callback; update references to call_and_encode, AssertUnwindSafe, outbound, encode_to_vec, and send_outbound_result_to_callback accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@baml_language/crates/bex_vm/src/vm.rs`:
- Around line 125-129: The NativeContinuationFrame loses the suspended native
call’s type_args, so calls to current_call_type_args() after a YieldToCall
return outer/pending generics; add a type_args field to NativeContinuationFrame
(same type as in NativeCallFrame), populate it when you create/replace a
NativeCallFrame with a NativeContinuationFrame (the YieldToCall path where you
pop NativeCallFrame), and update current_call_type_args() so it also inspects
NativeContinuationFrame for type_args. Apply the same change to the other
similar locations that construct NativeContinuationFrame (the other spots
referenced) so suspended native frames always preserve their type arguments.
- Around line 2581-2589: The native-call branch currently seeds type_args with
only pending_call_type_args which drops implicit generics; update the
FunctionKind::Native(_) handling to mirror the bytecode branch by combining
pending_call_type_args with closure_type_args and bound_method_class_type_args
when constructing the type_args for the NativeCallFrame (the same set the
bytecode path uses), then push Frame::NativeCall(NativeCallFrame { function:
callee_ptr, locals_offset, arg_count, type_args }) and set *frame_idx
accordingly so generic native closures and bound methods retain their implicit
frame generics.
---
Outside diff comments:
In `@baml_language/crates/bridge_cffi/src/lib.rs`:
- Around line 190-201: The encoding step (.encode_to_vec()) currently runs
outside the AssertUnwindSafe(...).catch_unwind() boundary so an encode-time
panic can bypass send_outbound_result_to_callback; move the encode work into the
protected unwind boundary by ensuring call_and_encode (or the closure passed to
AssertUnwindSafe) returns the already-encoded Vec<u8> (or call encode_to_vec()
inside that AssertUnwindSafe closure) so that the match on outbound handles both
successful encoded bytes and panics and always routes through
send_outbound_result_to_callback; update references to call_and_encode,
AssertUnwindSafe, outbound, encode_to_vec, and send_outbound_result_to_callback
accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: b8346eed-3400-48cb-b4e7-f6a921e8d115
📒 Files selected for processing (10)
baml_language/crates/bex_engine/src/lib.rsbaml_language/crates/bex_engine/tests/builtin_entry_points.rsbaml_language/crates/bex_engine/tests/function_resolution.rsbaml_language/crates/bex_vm/src/errors.rsbaml_language/crates/bex_vm/src/vm.rsbaml_language/crates/bridge_cffi/src/baml_to_host.rsbaml_language/crates/bridge_cffi/src/ffi/callbacks.rsbaml_language/crates/bridge_cffi/src/lib.rsbaml_language/sdks/nodejs/bridge_nodejs/src/runtime.rsbaml_language/sdks/python/rust/bridge_python/src/runtime.rs
|
Actionable comments posted: 0 |
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (2)
baml_language/crates/bex_vm/src/vm.rs (2)
125-130:⚠️ Potential issue | 🟠 Major | ⚡ Quick winPreserve native
type_argsacrossYieldToCall.
current_call_type_args()stops working after a native callback yield because the suspended frame is converted intoNativeContinuationFramewithout carrying itstype_args, and the accessor only checksFrame::NativeCall. Any resumed continuation that asks for the active generics now gets[].Suggested fix
pub struct NativeContinuationFrame { pub(crate) function: HeapPtr, pub(crate) continuation: Option<Box<dyn crate::package_baml::Continuation>>, + pub(crate) type_args: Vec<baml_type::Ty>, } pub fn current_call_type_args(&self) -> &[baml_type::Ty] { - if let Some(Frame::NativeCall(frame)) = self.frames.last() { - return &frame.type_args; + match self.frames.last() { + Some(Frame::NativeCall(frame)) => return &frame.type_args, + Some(Frame::NativeContinuation(frame)) => return &frame.type_args, + _ => {} } &[] } - let frame = self.frames.pop().expect("native frame stack is not empty"); - match frame { - Frame::NativeCall(frame) => { - self.stack.truncate(frame.locals_offset.raw()); - } - Frame::NativeContinuation(_) => {} + let type_args = match self.frames.pop().expect("native frame stack is not empty") { + Frame::NativeCall(frame) => { + self.stack.truncate(frame.locals_offset.raw()); + frame.type_args + } + Frame::NativeContinuation(frame) => frame.type_args, Frame::Bytecode(_) | Frame::SysOpCall(_) => { unreachable!("native yield handler requires native frame") } - } + }; self.frames .push(Frame::NativeContinuation(NativeContinuationFrame { function: native_fn_ptr, continuation: Some(continuation), + type_args, }));Also applies to: 977-986, 3558-3572
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@baml_language/crates/bex_vm/src/vm.rs` around lines 125 - 130, The suspended native callback frame loses its generics because NativeContinuationFrame lacks a type_args field and current_call_type_args only inspects Frame::NativeCall; add a type_args: Vec<TypeArg> (or the existing TypeArgs type) to NativeContinuationFrame, populate it wherever a frame is converted into a NativeContinuationFrame (e.g. in YieldToCall / the suspension code paths), and update current_call_type_args to also return that field for Frame::NativeContinuationFrame; make corresponding changes to any constructor or resume logic that builds or restores NativeContinuationFrame so the type_args are preserved across yields.
2719-2759:⚠️ Potential issue | 🟠 Major | ⚡ Quick winSeed native frames with implicit closure / bound-method generics too.
The native branch still stores only
call_type_args. That dropsclosure_type_argsandbound_method_class_type_args, socurrent_call_type_args()inside generic native closures and native methods diverges from the bytecode path.Suggested fix
match callee.kind { FunctionKind::Native(_) => { + let mut type_args = if !bound_method_class_type_args.is_empty() { + bound_method_class_type_args + } else { + closure_type_args + }; + type_args.extend(call_type_args); self.frames.push(Frame::NativeCall(NativeCallFrame { function: callee_ptr, locals_offset, arg_count, - type_args: call_type_args, + type_args, })); *frame_idx = self.frames.len() - 1; }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@baml_language/crates/bex_vm/src/vm.rs` around lines 2719 - 2759, The native call branch in FunctionKind::Native only stores call_type_args, dropping closure_type_args and bound_method_class_type_args so generics diverge from the bytecode path; construct initial_type_args the same way as in the Bytecode branch (use bound_method_class_type_args unless empty else closure_type_args, then extend with call_type_args) and pass that initial_type_args into the NativeCallFrame.type_args when pushing the frame (symbols: FunctionKind::Native, NativeCallFrame { type_args }, closure_type_args, bound_method_class_type_args, call_type_args, current_call_type_args()).
🧹 Nitpick comments (1)
baml_language/crates/bex_engine/src/lib.rs (1)
1918-1918: 💤 Low valueUnnecessary
.clone()onthrow_value.
throw_valueis already owned from theif let Some(throw_value)binding and is not used after this line.convert_external_to_vm_valuetakesBexExternalValueby value, so the clone is unnecessary.♻️ Suggested fix
- let value = self.convert_external_to_vm_value(thread, throw_value.clone())?; + let value = self.convert_external_to_vm_value(thread, throw_value)?;🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@baml_language/crates/bex_engine/src/lib.rs` at line 1918, The call unnecessarily clones throw_value; in the match arm where you have if let Some(throw_value) the binding owns the BexExternalValue and convert_external_to_vm_value(thread, BexExternalValue) takes it by value, so remove the .clone() and pass throw_value directly to convert_external_to_vm_value to avoid an unnecessary allocation (refer to convert_external_to_vm_value and the throw_value binding in lib.rs).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@baml_language/crates/bex_engine/src/lib.rs`:
- Around line 1276-1282: Update the docstring for the
EngineError::NotInvokableAsEntry variant to match the runtime check in call
sites like the code that calls self.lookup_function and rejects only
bex_vm_types::FunctionKind::NativeUnresolved; the current docstring ("Only
bytecode functions can be called via `call_function`") is stale—change it to
state that SysOp and resolved Native functions are allowed and that only
NativeUnresolved functions (or unresolved/native entry points) cannot be invoked
as an entry, referencing the variant name EngineError::NotInvokableAsEntry and
the lookup/validation logic that checks function_kind.
---
Duplicate comments:
In `@baml_language/crates/bex_vm/src/vm.rs`:
- Around line 125-130: The suspended native callback frame loses its generics
because NativeContinuationFrame lacks a type_args field and
current_call_type_args only inspects Frame::NativeCall; add a type_args:
Vec<TypeArg> (or the existing TypeArgs type) to NativeContinuationFrame,
populate it wherever a frame is converted into a NativeContinuationFrame (e.g.
in YieldToCall / the suspension code paths), and update current_call_type_args
to also return that field for Frame::NativeContinuationFrame; make corresponding
changes to any constructor or resume logic that builds or restores
NativeContinuationFrame so the type_args are preserved across yields.
- Around line 2719-2759: The native call branch in FunctionKind::Native only
stores call_type_args, dropping closure_type_args and
bound_method_class_type_args so generics diverge from the bytecode path;
construct initial_type_args the same way as in the Bytecode branch (use
bound_method_class_type_args unless empty else closure_type_args, then extend
with call_type_args) and pass that initial_type_args into the
NativeCallFrame.type_args when pushing the frame (symbols: FunctionKind::Native,
NativeCallFrame { type_args }, closure_type_args, bound_method_class_type_args,
call_type_args, current_call_type_args()).
---
Nitpick comments:
In `@baml_language/crates/bex_engine/src/lib.rs`:
- Line 1918: The call unnecessarily clones throw_value; in the match arm where
you have if let Some(throw_value) the binding owns the BexExternalValue and
convert_external_to_vm_value(thread, BexExternalValue) takes it by value, so
remove the .clone() and pass throw_value directly to
convert_external_to_vm_value to avoid an unnecessary allocation (refer to
convert_external_to_vm_value and the throw_value binding in lib.rs).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 8e0f2190-ad4e-440b-a9c3-282e0e1b28cd
📒 Files selected for processing (8)
baml_language/crates/bex_engine/src/lib.rsbaml_language/crates/bex_engine/tests/builtin_entry_points.rsbaml_language/crates/bex_vm/src/errors.rsbaml_language/crates/bex_vm/src/lib.rsbaml_language/crates/bex_vm/src/package_baml/json.rsbaml_language/crates/bex_vm/src/vm.rsbaml_language/crates/bex_vm_types/src/bytecode.rsbaml_language/crates/tools_onionskin/src/compiler.rs
✅ Files skipped from review due to trivial changes (3)
- baml_language/crates/bex_vm/src/lib.rs
- baml_language/crates/bex_vm_types/src/bytecode.rs
- baml_language/crates/bex_vm/src/package_baml/json.rs
🚧 Files skipped from review as they are similar to previous changes (1)
- baml_language/crates/bex_engine/tests/builtin_entry_points.rs
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@baml_language/crates/bex_engine/tests/function_resolution.rs`:
- Around line 145-146: The test currently asserts filesystem sysop behavior
against the hardcoded root path "/" which is host-dependent and flaky; update
the test to use a guaranteed-existing path such as std::env::temp_dir() (or
std::env::current_dir()) instead of "/" in the sysop assertion and any related
asserts in the same test block (the tokio test annotated with #[tokio::test]
that checks filesystem sysop behavior around lines 145–161); convert the PathBuf
to a string in a platform-safe way (e.g., using to_string_lossy or to_str with
fallback) before passing it to the sysop call so the test is reliable across
CI/containers.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 68970235-3336-4829-9ed2-64e7b36f07a4
📒 Files selected for processing (13)
baml_language/crates/bex_engine/src/lib.rsbaml_language/crates/bex_engine/tests/function_resolution.rsbaml_language/crates/bex_vm/src/errors.rsbaml_language/crates/bex_vm/src/lib.rsbaml_language/crates/bex_vm/src/package_baml/json.rsbaml_language/crates/bex_vm/src/vm.rsbaml_language/crates/bex_vm_types/src/bytecode.rsbaml_language/crates/bridge_cffi/src/baml_to_host.rsbaml_language/crates/bridge_cffi/src/ffi/callbacks.rsbaml_language/crates/bridge_cffi/src/lib.rsbaml_language/crates/tools_onionskin/src/compiler.rsbaml_language/sdks/nodejs/bridge_nodejs/src/runtime.rsbaml_language/sdks/python/rust/bridge_python/src/runtime.rs
✅ Files skipped from review due to trivial changes (4)
- baml_language/crates/bex_vm/src/lib.rs
- baml_language/crates/bridge_cffi/src/ffi/callbacks.rs
- baml_language/crates/tools_onionskin/src/compiler.rs
- baml_language/crates/bex_vm_types/src/bytecode.rs
🚧 Files skipped from review as they are similar to previous changes (8)
- baml_language/sdks/python/rust/bridge_python/src/runtime.rs
- baml_language/sdks/nodejs/bridge_nodejs/src/runtime.rs
- baml_language/crates/bex_vm/src/package_baml/json.rs
- baml_language/crates/bridge_cffi/src/baml_to_host.rs
- baml_language/crates/bridge_cffi/src/lib.rs
- baml_language/crates/bex_vm/src/errors.rs
- baml_language/crates/bex_engine/src/lib.rs
- baml_language/crates/bex_vm/src/vm.rs
| /// filesystem sysop and return a bool. `/` exists on the test host. | ||
| #[tokio::test] |
There was a problem hiding this comment.
Avoid host-dependent root-path assertions in sysop test.
"/" can be environment-dependent in CI/containers; this can make the test flaky. Use a guaranteed-existing path from std::env::temp_dir() (or current dir) instead of hardcoding root.
Suggested fix
#[tokio::test]
async fn sysop_fs_exists_callable_as_entry_point() {
let eng = engine(&[("main.baml", "function main() -> int { 1 }")]);
+ let existing_path = std::env::temp_dir().to_string_lossy().to_string();
let result = eng
.call_function(
"baml.fs.exists",
- vec![BexExternalValue::String("/".to_string())],
+ vec![BexExternalValue::String(existing_path)],
FunctionCallContextBuilder::new(CallId::next()).build(),
true,
)
.await;
match result {
- Ok(BexExternalValue::Bool(exists)) => assert!(exists, "`/` should exist"),
+ Ok(BexExternalValue::Bool(exists)) => assert!(exists, "temp_dir should exist"),
other => panic!("expected Ok(Bool(true)) from baml.fs.exists as entry, got {other:?}"),
}
}Also applies to: 153-161
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@baml_language/crates/bex_engine/tests/function_resolution.rs` around lines
145 - 146, The test currently asserts filesystem sysop behavior against the
hardcoded root path "/" which is host-dependent and flaky; update the test to
use a guaranteed-existing path such as std::env::temp_dir() (or
std::env::current_dir()) instead of "/" in the sysop assertion and any related
asserts in the same test block (the tokio test annotated with #[tokio::test]
that checks filesystem sysop behavior around lines 145–161); convert the PathBuf
to a string in a platform-safe way (e.g., using to_string_lossy or to_str with
fallback) before passing it to the sysop call so the test is reliable across
CI/containers.
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
baml_language/crates/bex_vm/src/package_baml/json.rs (1)
81-94: 💤 Low valueMisleading diagnostic from reusing
MissingNativeFunction.
MissingNativeFunctionformats asmissing native function: {name}, so the "no active native call frame" branch yields the doubled-up, confusing stringmissing native function: baml.json.from_string: missing active native call frame. This PR already adds purpose-built variants (ExpectedActiveSysOp) for the analogous sys-op case; consider a similarly named native-call variant (or at least drop the misleading prefix) so these fatal internal errors read clearly when debugging.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@baml_language/crates/bex_vm/src/package_baml/json.rs` around lines 81 - 94, The error message produced by first_native_type_arg currently reuses VmInternalError::MissingNativeFunction which yields a confusing prefix; update the error to use a new, purpose-built variant (e.g., VmInternalError::ExpectedActiveNativeCall or similar) and return that from first_native_type_arg instead of MissingNativeFunction, adjusting the construction of the VmRustFnError accordingly; add the new enum variant to VmInternalError with a clear name and message (or at minimum remove the misleading "missing native function" prefix in the message), and update any pattern matches/usages of VmInternalError to handle the new variant (refer to first_native_type_arg, VmRustFnError, and VmInternalError).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@baml_language/crates/bex_vm/src/package_baml/json.rs`:
- Around line 81-94: The error message produced by first_native_type_arg
currently reuses VmInternalError::MissingNativeFunction which yields a confusing
prefix; update the error to use a new, purpose-built variant (e.g.,
VmInternalError::ExpectedActiveNativeCall or similar) and return that from
first_native_type_arg instead of MissingNativeFunction, adjusting the
construction of the VmRustFnError accordingly; add the new enum variant to
VmInternalError with a clear name and message (or at minimum remove the
misleading "missing native function" prefix in the message), and update any
pattern matches/usages of VmInternalError to handle the new variant (refer to
first_native_type_arg, VmRustFnError, and VmInternalError).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 7e39e1d4-6135-4329-bbaa-beb511e69d47
📒 Files selected for processing (7)
baml_language/crates/bex_engine/src/lib.rsbaml_language/crates/bex_vm/src/errors.rsbaml_language/crates/bex_vm/src/lib.rsbaml_language/crates/bex_vm/src/package_baml/json.rsbaml_language/crates/bex_vm/src/vm.rsbaml_language/crates/bex_vm_types/src/bytecode.rsbaml_language/crates/tools_onionskin/src/compiler.rs
✅ Files skipped from review due to trivial changes (2)
- baml_language/crates/bex_vm/src/lib.rs
- baml_language/crates/bex_vm_types/src/bytecode.rs
🚧 Files skipped from review as they are similar to previous changes (3)
- baml_language/crates/bex_engine/src/lib.rs
- baml_language/crates/tools_onionskin/src/compiler.rs
- baml_language/crates/bex_vm/src/vm.rs
Summary by CodeRabbit
New Features
Bug Fixes
SDK / Runtimes