vskill 0.2.84 → 0.2.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,52 @@
1
+ // ---------------------------------------------------------------------------
2
+ // concurrency.ts -- cooperative semaphore for limiting concurrent LLM calls
3
+ // ---------------------------------------------------------------------------
4
+ export const DEFAULT_CONCURRENCY = 3;
5
+ export class Semaphore {
6
+ limit;
7
+ running = 0;
8
+ queue = [];
9
+ constructor(limit = DEFAULT_CONCURRENCY) {
10
+ this.limit = limit;
11
+ if (limit < 1)
12
+ throw new Error("Semaphore limit must be >= 1");
13
+ }
14
+ async acquire() {
15
+ if (this.running < this.limit) {
16
+ this.running++;
17
+ return;
18
+ }
19
+ return new Promise((resolve) => this.queue.push(() => {
20
+ this.running++;
21
+ resolve();
22
+ }));
23
+ }
24
+ release() {
25
+ if (this.running <= 0)
26
+ return; // idempotent — no underflow
27
+ this.running--;
28
+ const next = this.queue.shift();
29
+ if (next)
30
+ next();
31
+ }
32
+ get available() {
33
+ return Math.max(0, this.limit - this.running);
34
+ }
35
+ get pending() {
36
+ return this.queue.length;
37
+ }
38
+ get active() {
39
+ return this.running;
40
+ }
41
+ }
42
+ // Per-skill semaphore registry — ensures one semaphore per skill
43
+ const registry = new Map();
44
+ export function getSkillSemaphore(skillKey, limit = DEFAULT_CONCURRENCY) {
45
+ let sem = registry.get(skillKey);
46
+ if (!sem) {
47
+ sem = new Semaphore(limit);
48
+ registry.set(skillKey, sem);
49
+ }
50
+ return sem;
51
+ }
52
+ //# sourceMappingURL=concurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../src/eval-server/concurrency.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,MAAM,OAAO,SAAS;IAIS;IAHrB,OAAO,GAAG,CAAC,CAAC;IACZ,KAAK,GAAsB,EAAE,CAAC;IAEtC,YAA6B,QAAgB,mBAAmB;QAAnC,UAAK,GAAL,KAAK,CAA8B;QAC9D,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC;YAAE,OAAO,CAAC,4BAA4B;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI;YAAE,IAAI,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAED,iEAAiE;AACjE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE9C,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,KAAK,GAAG,mBAAmB;IAC7E,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3B,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}