@gns-foundation/hive-worker 0.1.2 → 0.1.4

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.
@@ -9,7 +9,7 @@ export interface ExecutorOptions {
9
9
  onToken?: (token: string) => void;
10
10
  onLog?: (line: string) => void;
11
11
  }
12
- export declare function executeJob(job: HiveJob, opts?: ExecutorOptions): Promise<JobResult>;
12
+ export declare function executeJob(job: HiveJob, onTokenOrOpts?: ((t: string) => void) | ExecutorOptions): Promise<JobResult>;
13
13
  export declare function listCachedModels(): Array<{
14
14
  modelId: string;
15
15
  sizeMb: number;
package/dist/executor.js CHANGED
@@ -93,7 +93,10 @@ export async function downloadModel(modelId, url, onProgress) {
93
93
  fs.renameSync(tmpDest, dest);
94
94
  return dest;
95
95
  }
96
- export async function executeJob(job, opts = {}) {
96
+ export async function executeJob(job, onTokenOrOpts = {}) {
97
+ const opts = typeof onTokenOrOpts === 'function'
98
+ ? { onToken: onTokenOrOpts }
99
+ : onTokenOrOpts;
97
100
  const llamaCli = findLlamaCli();
98
101
  if (!llamaCli) {
99
102
  throw new Error('llama-cli not found. Install llama.cpp: https://github.com/ggerganov/llama.cpp');
@@ -126,7 +129,30 @@ function runLlamaCli(binary, modelPath, job, opts) {
126
129
  });
127
130
  let stdout = '';
128
131
  let stderr = '';
129
- proc.stdout.on('data', (chunk) => { stdout += chunk.toString(); });
132
+ let streamBuffer = ''; // buffer for <|assistant|> detection before streaming
133
+ let streamingStarted = false;
134
+ proc.stdout.on('data', (chunk) => {
135
+ const text = chunk.toString();
136
+ stdout += text;
137
+ // Stream tokens to caller once we've passed the <|assistant|> marker
138
+ if (opts.onToken) {
139
+ if (!streamingStarted) {
140
+ streamBuffer += text;
141
+ const markerIdx = streamBuffer.lastIndexOf('<|assistant|>');
142
+ if (markerIdx !== -1) {
143
+ // Found marker — emit everything after it
144
+ streamingStarted = true;
145
+ const afterMarker = streamBuffer.slice(markerIdx + '<|assistant|>'.length);
146
+ if (afterMarker.length > 0)
147
+ opts.onToken(afterMarker);
148
+ }
149
+ }
150
+ else {
151
+ // Already past marker — emit each chunk immediately
152
+ opts.onToken(text);
153
+ }
154
+ }
155
+ });
130
156
  proc.stderr.on('data', (chunk) => {
131
157
  stderr += chunk.toString();
132
158
  opts.onLog?.(chunk.toString().slice(0, 60).trim());
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,yBAAyB;AACzB,sCAAsC;AACtC,EAAE;AACF,aAAa;AACb,kEAAkE;AAClE,gEAAgE;AAChE,+DAA+D;AAC/D,iEAAiE;AACjE,EAAE;AACF,4DAA4D;AAC5D,6DAA6D;AAC7D,+DAA+D;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,iEAAiE;AAEjE,MAAM,oBAAoB,GAAG;IAC3B,kEAAkE;IAClE,GAAG,EAAE,CAAC,OAAO,EAAE,uCAAuC;IACtD,GAAG,EAAE,CAAC,OAAO,EAAE,mCAAmC;IAClD,kBAAkB;IAClB,wBAAwB;IACxB,GAAG,EAAE,CAAC,OAAO,EAAE,gCAAgC;IAC/C,GAAG,EAAE,CAAC,OAAO,EAAE,4BAA4B;IAC3C,WAAW;CACZ,CAAC;AAEF,MAAM,UAAU,YAAY;IAC1B,KAAK,MAAM,SAAS,IAAI,oBAAoB,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,QAAQ,CAAC,YAAY,SAAS,eAAe,SAAS,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1F,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iEAAiE;AAEjE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAEnE,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,UAAU,mBAAmB;IACjC,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,CAAC;IACzE,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,kEAAkE;AAClE,MAAM,YAAY,GAA2B;IAC3C,YAAY,EACV,0GAA0G;IAC5G,YAAY,EACV,4FAA4F;IAC9F,WAAW,EACT,iHAAiH;CACpH,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,GAAG,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC;IACxC,OAAO,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;AAC5C,CAAC;AAED,gEAAgE;AAEhE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,GAAW,EACX,UAAkE;IAElE,mBAAmB,EAAE,CAAC;IACtB,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC;IAEnC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxE,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvE,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;IAEzC,MAAM,MAAM,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACrC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI;YAAE,MAAM;QAChB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,UAAU,CACR,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,EAC3C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,EACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAY,EACZ,gBAAyD,EAAE;IAE3D,MAAM,IAAI,GAAoB,OAAO,aAAa,KAAK,UAAU;QAC/D,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE;QAC5B,CAAC,CAAC,aAAa,CAAC;IAClB,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,UAAU,GAAG,CAAC,QAAQ,mBAAmB,SAAS,IAAI;YACtD,iCAAiC,GAAG,CAAC,QAAQ,EAAE,CAChD,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAClB,MAAc,EACd,SAAiB,EACjB,GAAY,EACZ,IAAqB;IAErB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAE9D,kEAAkE;QAClE,MAAM,IAAI,GAAG;YACX,SAAS,EAAM,SAAS;YACxB,UAAU,EAAK,GAAG,CAAC,MAAM;YACzB,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YACrC,QAAQ,EAAO,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;YACtC,YAAY,EAAG,MAAM;YACrB,WAAW,EAAI,MAAM,CAAC,OAAO,CAAC;YAC9B,eAAe,EAAG,4BAA4B;YAC9C,MAAM,EAAE,GAAG,EAAO,iDAAiD;SACpE,CAAC;QAEF,IAAI,CAAC,KAAK,EAAE,CAAC,aAAa,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,UAAU,UAAU,CAAC,CAAC;QAErE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE;YAC/B,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,YAAY,GAAG,EAAE,CAAC,CAAE,sDAAsD;QAC9E,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,IAAI,CAAC;YAEf,qEAAqE;YACrE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,YAAY,IAAI,IAAI,CAAC;oBACrB,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;oBAC5D,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;wBACrB,0CAA0C;wBAC1C,gBAAgB,GAAG,IAAI,CAAC;wBACxB,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;wBAC3E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;4BAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,oDAAoD;oBACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACvC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YACpC,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,MAAM,UAAU,IAAI,EAAE,CAAC,CAAC;YAE/E,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrE,OAAO;YACT,CAAC;YAED,2EAA2E;YAC3E,4DAA4D;YAC5D,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,eAAe,GAAG,eAAe,CAAC;YACxC,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAC7D,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gBACxB,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9E,CAAC;YAED,sCAAsC;YACtC,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACrF,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YACtF,CAAC;iBAAM,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YAC5E,CAAC;YAED,OAAO,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QACjD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACpF,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAGD,iEAAiE;AAEjE,MAAM,UAAU,gBAAgB;IAC9B,mBAAmB,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;KACnF,CAAC,CAAC,CAAC;AACN,CAAC"}
package/dist/jobs.d.ts CHANGED
@@ -23,6 +23,8 @@ export interface HiveJob {
23
23
  submitter_pk: string;
24
24
  created_at: string;
25
25
  timeout_at: string;
26
+ streaming: boolean;
27
+ chunks_count: number | null;
26
28
  }
27
29
  export interface JobResult {
28
30
  resultText: string;
@@ -32,7 +34,10 @@ export interface JobResult {
32
34
  }
33
35
  export declare function claimJob(workerPk: string, h3Cell: string, modelId?: string): Promise<HiveJob | null>;
34
36
  export declare function markComputing(jobId: string): Promise<void>;
35
- export declare function postResult(jobId: string, result: JobResult): Promise<void>;
37
+ export declare function postResult(jobId: string, result: JobResult & {
38
+ chunksCount?: number;
39
+ }): Promise<void>;
40
+ export declare function postChunk(jobId: string, chunkIndex: number, content: string): Promise<void>;
36
41
  export declare function postFailure(jobId: string, errorMsg: string): Promise<void>;
37
42
  export declare function cleanupTimedOutJobs(): Promise<void>;
38
43
  export declare function fetchJob(jobId: string): Promise<HiveJob | null>;
@@ -49,5 +54,5 @@ export declare function startJobPoller(opts: {
49
54
  onJobCompleted: (job: HiveJob, result: JobResult) => void;
50
55
  onJobFailed: (job: HiveJob, error: string) => void;
51
56
  onLog: (msg: string) => void;
52
- executor: (job: HiveJob) => Promise<JobResult>;
57
+ executor: (job: HiveJob, onToken?: (t: string) => void) => Promise<JobResult>;
53
58
  }): PollController;
package/dist/jobs.js CHANGED
@@ -39,10 +39,23 @@ export async function postResult(jobId, result) {
39
39
  result_text: result.resultText,
40
40
  tokens_generated: result.tokensGenerated,
41
41
  tokens_per_second: result.tokensPerSecond,
42
+ chunks_count: result.chunksCount ?? null,
42
43
  completed_at: new Date().toISOString(),
43
44
  error_message: null,
44
45
  });
45
46
  }
47
+ // ─── Post chunk (streaming) ──────────────────────────────────
48
+ export async function postChunk(jobId, chunkIndex, content) {
49
+ const resp = await fetch(`${SUPABASE_URL}/rest/v1/hive_job_chunks`, {
50
+ method: 'POST',
51
+ headers: { ...HEADERS, 'Prefer': 'return=minimal' },
52
+ body: JSON.stringify({ job_id: jobId, chunk_index: chunkIndex, content }),
53
+ });
54
+ if (!resp.ok && resp.status !== 201 && resp.status !== 204) {
55
+ // Non-fatal — log but don't throw (batch result will still arrive)
56
+ console.error(`postChunk failed: ${resp.status}`);
57
+ }
58
+ }
46
59
  // ─── Post failure ─────────────────────────────────────────────
47
60
  export async function postFailure(jobId, errorMsg) {
48
61
  await patchJob(jobId, {
@@ -103,8 +116,14 @@ export function startJobPoller(opts) {
103
116
  opts.onJobClaimed(job);
104
117
  try {
105
118
  await markComputing(job.id);
106
- const result = await opts.executor(job);
107
- await postResult(job.id, result);
119
+ let chunkIndex = 0;
120
+ const onToken = job.streaming
121
+ ? async (token) => {
122
+ await postChunk(job.id, chunkIndex++, token).catch(() => { });
123
+ }
124
+ : undefined;
125
+ const result = await opts.executor(job, onToken);
126
+ await postResult(job.id, { ...result, chunksCount: chunkIndex });
108
127
  opts.onJobCompleted(job, result);
109
128
  }
110
129
  catch (execErr) {
package/dist/jobs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gns-foundation/hive-worker",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Turn your device into a GEIANT Hive compute node. Earn GNS tokens.",
5
5
  "bin": {
6
6
  "hive-worker": "./dist/cli.js"
package/src/executor.ts CHANGED
@@ -131,8 +131,11 @@ export interface ExecutorOptions {
131
131
 
132
132
  export async function executeJob(
133
133
  job: HiveJob,
134
- opts: ExecutorOptions = {},
134
+ onTokenOrOpts: ((t: string) => void) | ExecutorOptions = {},
135
135
  ): Promise<JobResult> {
136
+ const opts: ExecutorOptions = typeof onTokenOrOpts === 'function'
137
+ ? { onToken: onTokenOrOpts }
138
+ : onTokenOrOpts;
136
139
  const llamaCli = findLlamaCli();
137
140
  if (!llamaCli) {
138
141
  throw new Error(
@@ -181,8 +184,30 @@ function runLlamaCli(
181
184
 
182
185
  let stdout = '';
183
186
  let stderr = '';
184
-
185
- proc.stdout.on('data', (chunk: Buffer) => { stdout += chunk.toString(); });
187
+ let streamBuffer = ''; // buffer for <|assistant|> detection before streaming
188
+ let streamingStarted = false;
189
+
190
+ proc.stdout.on('data', (chunk: Buffer) => {
191
+ const text = chunk.toString();
192
+ stdout += text;
193
+
194
+ // Stream tokens to caller once we've passed the <|assistant|> marker
195
+ if (opts.onToken) {
196
+ if (!streamingStarted) {
197
+ streamBuffer += text;
198
+ const markerIdx = streamBuffer.lastIndexOf('<|assistant|>');
199
+ if (markerIdx !== -1) {
200
+ // Found marker — emit everything after it
201
+ streamingStarted = true;
202
+ const afterMarker = streamBuffer.slice(markerIdx + '<|assistant|>'.length);
203
+ if (afterMarker.length > 0) opts.onToken(afterMarker);
204
+ }
205
+ } else {
206
+ // Already past marker — emit each chunk immediately
207
+ opts.onToken(text);
208
+ }
209
+ }
210
+ });
186
211
  proc.stderr.on('data', (chunk: Buffer) => {
187
212
  stderr += chunk.toString();
188
213
  opts.onLog?.(chunk.toString().slice(0, 60).trim());
package/src/jobs.ts CHANGED
@@ -40,6 +40,8 @@ export interface HiveJob {
40
40
  submitter_pk: string;
41
41
  created_at: string;
42
42
  timeout_at: string;
43
+ streaming: boolean;
44
+ chunks_count: number | null;
43
45
  }
44
46
 
45
47
  export interface JobResult {
@@ -86,17 +88,42 @@ export async function markComputing(jobId: string): Promise<void> {
86
88
 
87
89
  // ─── Post result ──────────────────────────────────────────────
88
90
 
89
- export async function postResult(jobId: string, result: JobResult): Promise<void> {
91
+ export async function postResult(
92
+ jobId: string,
93
+ result: JobResult & { chunksCount?: number },
94
+ ): Promise<void> {
90
95
  await patchJob(jobId, {
91
96
  status: 'completed',
92
97
  result_text: result.resultText,
93
98
  tokens_generated: result.tokensGenerated,
94
99
  tokens_per_second: result.tokensPerSecond,
100
+ chunks_count: result.chunksCount ?? null,
95
101
  completed_at: new Date().toISOString(),
96
102
  error_message: null,
97
103
  });
98
104
  }
99
105
 
106
+ // ─── Post chunk (streaming) ──────────────────────────────────
107
+
108
+ export async function postChunk(
109
+ jobId: string,
110
+ chunkIndex: number,
111
+ content: string,
112
+ ): Promise<void> {
113
+ const resp = await fetch(
114
+ `${SUPABASE_URL}/rest/v1/hive_job_chunks`,
115
+ {
116
+ method: 'POST',
117
+ headers: { ...HEADERS, 'Prefer': 'return=minimal' },
118
+ body: JSON.stringify({ job_id: jobId, chunk_index: chunkIndex, content }),
119
+ },
120
+ );
121
+ if (!resp.ok && resp.status !== 201 && resp.status !== 204) {
122
+ // Non-fatal — log but don't throw (batch result will still arrive)
123
+ console.error(`postChunk failed: ${resp.status}`);
124
+ }
125
+ }
126
+
100
127
  // ─── Post failure ─────────────────────────────────────────────
101
128
 
102
129
  export async function postFailure(jobId: string, errorMsg: string): Promise<void> {
@@ -177,7 +204,7 @@ export function startJobPoller(opts: {
177
204
  onJobCompleted: (job: HiveJob, result: JobResult) => void;
178
205
  onJobFailed: (job: HiveJob, error: string) => void;
179
206
  onLog: (msg: string) => void;
180
- executor: (job: HiveJob) => Promise<JobResult>;
207
+ executor: (job: HiveJob, onToken?: (t: string) => void) => Promise<JobResult>;
181
208
  }): PollController {
182
209
  let running = true;
183
210
  let busy = false;
@@ -199,9 +226,15 @@ export function startJobPoller(opts: {
199
226
  try {
200
227
  await markComputing(job.id);
201
228
 
202
- const result = await opts.executor(job);
229
+ let chunkIndex = 0;
230
+ const onToken = job.streaming
231
+ ? async (token: string) => {
232
+ await postChunk(job.id, chunkIndex++, token).catch(() => {});
233
+ }
234
+ : undefined;
235
+ const result = await opts.executor(job, onToken);
203
236
 
204
- await postResult(job.id, result);
237
+ await postResult(job.id, { ...result, chunksCount: chunkIndex });
205
238
  opts.onJobCompleted(job, result);
206
239
  } catch (execErr) {
207
240
  const errMsg = execErr instanceof Error ? execErr.message : String(execErr);