-
Notifications
You must be signed in to change notification settings - Fork 1
Closed
Labels
Description
Problem
Every skill embedding creates 2-3 provider clones due to closure capture patterns. With 50 skills and buffer_unordered(50), this creates 100+ simultaneous provider clones.
File: crates/zeph-core/src/agent/mod.rs lines 743-747, crates/zeph-skills/src/matcher.rs lines 20-37
Current code:
let provider = self.provider.clone(); // Clone 1
let embed_fn = |text: &str| {
let owned = text.to_owned();
let p = provider.clone(); // Clone 2 per invocation
Box::pin(async move { p.embed(&owned).await })
};Impact
- Memory: Each AnyProvider clone is ~200-500 bytes
- CPU: Arc reference counting overhead
- Measured overhead: 25-50ms per skill reload with 50 skills
Solution
Wrap provider in Arc to make clones cheap (8 bytes each):
struct Agent<C: Channel, T: ToolExecutor> {
provider: Arc<AnyProvider>,
// ...
}Priority: P0
Effort: Small (1-2 hours)
Related to #391
Reactions are currently unavailable