@roboflow/inference-sdk 0.1.7 → 0.1.8

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.
package/dist/webrtc.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import { Connector, WebRTCParams } from "./inference-api";
2
+ import { WebRTCOutputData } from "./webrtc-types";
3
+ export type { WebRTCVideoMetadata, WebRTCOutputData } from "./webrtc-types";
4
+ export { FileUploader } from "./video-upload";
2
5
  /**
3
6
  * Reassembles chunked binary messages from the datachannel
4
7
  */
@@ -29,24 +32,33 @@ export interface UseStreamParams {
29
32
  source: MediaStream;
30
33
  connector: Connector;
31
34
  wrtcParams: WebRTCParams;
32
- onData?: (data: any) => void;
35
+ onData?: (data: WebRTCOutputData) => void;
33
36
  options?: UseStreamOptions;
34
37
  }
35
38
  /**
36
39
  * WebRTC Connection object
37
40
  *
38
- * Represents an active WebRTC connection to Roboflow for streaming inference.
41
+ * Represents an active WebRTC connection to Roboflow for streaming inference
42
+ * or file-based batch processing.
39
43
  */
40
44
  export declare class RFWebRTCConnection {
41
45
  private pc;
42
- private _localStream;
46
+ private _localStream?;
43
47
  private remoteStreamPromise;
44
48
  private pipelineId;
45
49
  private apiKey;
46
50
  private dataChannel;
47
51
  private reassembler;
52
+ private uploadChannel?;
53
+ private uploader?;
54
+ private onComplete?;
48
55
  /** @private */
49
- constructor(pc: RTCPeerConnection, localStream: MediaStream, remoteStreamPromise: Promise<MediaStream>, pipelineId: string | null, apiKey: string | null, dataChannel: RTCDataChannel, onData?: (data: any) => void);
56
+ constructor(pc: RTCPeerConnection, remoteStreamPromise: Promise<MediaStream>, pipelineId: string | null, apiKey: string | null, dataChannel: RTCDataChannel, options?: {
57
+ localStream?: MediaStream;
58
+ uploadChannel?: RTCDataChannel;
59
+ onData?: (data: any) => void;
60
+ onComplete?: () => void;
61
+ });
50
62
  /**
51
63
  * Get the remote stream (processed video from Roboflow)
52
64
  *
@@ -63,21 +75,23 @@ export declare class RFWebRTCConnection {
63
75
  /**
64
76
  * Get the local stream (original camera)
65
77
  *
66
- * @returns The local MediaStream
78
+ * @returns The local MediaStream, or undefined if using file upload mode
67
79
  *
68
80
  * @example
69
81
  * ```typescript
70
82
  * const conn = await useStream({ ... });
71
83
  * const localStream = conn.localStream();
72
- * videoElement.srcObject = localStream;
84
+ * if (localStream) {
85
+ * videoElement.srcObject = localStream;
86
+ * }
73
87
  * ```
74
88
  */
75
- localStream(): MediaStream;
89
+ localStream(): MediaStream | undefined;
76
90
  /**
77
91
  * Cleanup and close connection
78
92
  *
79
93
  * Terminates the pipeline on Roboflow, closes the peer connection,
80
- * and stops the local media stream.
94
+ * and stops the local media stream (if applicable).
81
95
  *
82
96
  * @returns Promise that resolves when cleanup is complete
83
97
  *
@@ -89,6 +103,26 @@ export declare class RFWebRTCConnection {
89
103
  * ```
90
104
  */
91
105
  cleanup(): Promise<void>;
106
+ /**
107
+ * Start uploading a file through the connection
108
+ *
109
+ * @param file - The file to upload
110
+ * @param onProgress - Optional callback for progress updates (bytesUploaded, totalBytes)
111
+ * @returns Promise that resolves when upload is complete
112
+ * @throws Error if no upload channel is available
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * await connection.startUpload(videoFile, (uploaded, total) => {
117
+ * console.log(`Upload progress: ${(uploaded / total * 100).toFixed(1)}%`);
118
+ * });
119
+ * ```
120
+ */
121
+ startUpload(file: File, onProgress?: (bytesUploaded: number, totalBytes: number) => void): Promise<void>;
122
+ /**
123
+ * Cancel any ongoing file upload
124
+ */
125
+ cancelUpload(): void;
92
126
  /**
93
127
  * Reconfigure pipeline outputs at runtime
94
128
  *
@@ -168,4 +202,60 @@ export declare class RFWebRTCConnection {
168
202
  * ```
169
203
  */
170
204
  export declare function useStream({ source, connector, wrtcParams, onData, options }: UseStreamParams): Promise<RFWebRTCConnection>;
205
+ /**
206
+ * Parameters for useVideoFile function
207
+ */
208
+ export interface UseVideoFileParams {
209
+ /** The video file to upload */
210
+ file: File;
211
+ /** Connector for WebRTC signaling */
212
+ connector: Connector;
213
+ /** WebRTC parameters for the workflow */
214
+ wrtcParams: WebRTCParams;
215
+ /** Callback for inference results */
216
+ onData?: (data: WebRTCOutputData) => void;
217
+ /** Callback for upload progress */
218
+ onUploadProgress?: (bytesUploaded: number, totalBytes: number) => void;
219
+ /** Callback when processing completes (datachannel closes) */
220
+ onComplete?: () => void;
221
+ }
222
+ /**
223
+ * Upload a video file for batch inference processing
224
+ *
225
+ * Creates a WebRTC connection to Roboflow for uploading a video file
226
+ * and receiving inference results. The file is uploaded via datachannel
227
+ * with intelligent backpressure handling.
228
+ *
229
+ * @param params - Connection parameters
230
+ * @returns Promise resolving to RFWebRTCConnection
231
+ *
232
+ * @example
233
+ * ```typescript
234
+ * import { connectors, webrtc } from './index.ts';
235
+ *
236
+ * const connector = connectors.withApiKey("your-api-key");
237
+ * const connection = await webrtc.useVideoFile({
238
+ * file: videoFile,
239
+ * connector,
240
+ * wrtcParams: {
241
+ * workflowSpec: { ... },
242
+ * imageInputName: "image",
243
+ * dataOutputNames: ["predictions"]
244
+ * },
245
+ * onData: (data) => {
246
+ * console.log("Inference results:", data);
247
+ * if (data.processing_complete) {
248
+ * console.log("Processing complete!");
249
+ * }
250
+ * },
251
+ * onUploadProgress: (uploaded, total) => {
252
+ * console.log(`Upload: ${(uploaded / total * 100).toFixed(1)}%`);
253
+ * }
254
+ * });
255
+ *
256
+ * // When done
257
+ * await connection.cleanup();
258
+ * ```
259
+ */
260
+ export declare function useVideoFile({ file, connector, wrtcParams, onData, onUploadProgress, onComplete }: UseVideoFileParams): Promise<RFWebRTCConnection>;
171
261
  //# sourceMappingURL=webrtc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc.d.ts","sourceRoot":"","sources":["../src/webrtc.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,SAAS,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AASnG;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAGN;IAEf;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAqC9G;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,CAQxI;AAED,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B,CAAC,EAAE,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,YAAY,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAmID;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,WAAW,CAAmB;IAEtC,eAAe;gBAEb,EAAE,EAAE,iBAAiB,EACrB,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,OAAO,CAAC,WAAW,CAAC,EACzC,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,WAAW,EAAE,cAAc,EAC3B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI;IAsD9B;;;;;;;;;;;OAWG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC;IAI1C;;;;;;;;;;;OAWG;IACH,WAAW,IAAI,WAAW;IAI1B;;;;;;;;;;;;;;OAcG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,kBAAkB,CAAC,MAAM,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI;IAclG;;;OAGG;IACH,OAAO,CAAC,QAAQ;CAajB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,SAAS,CAAC,EAC9B,MAAM,EACN,SAAS,EACT,UAAU,EACV,MAAM,EACN,OAAY,EACb,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0F/C"}
1
+ {"version":3,"file":"webrtc.d.ts","sourceRoot":"","sources":["../src/webrtc.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roboflow/inference-sdk",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Lightweight client for Roboflow's hosted inference API with WebRTC streaming support",
5
5
  "keywords": [
6
6
  "roboflow",
@@ -25,11 +25,12 @@
25
25
  },
26
26
  "scripts": {
27
27
  "dev": "vite",
28
- "build": "vite build",
28
+ "build": "tsc --noEmit && vite build",
29
29
  "preview": "vite preview",
30
30
  "clean": "rm -rf dist",
31
31
  "test": "vitest run",
32
- "test:watch": "vitest"
32
+ "test:watch": "vitest",
33
+ "typecheck": "tsc --noEmit"
33
34
  },
34
35
  "author": "Roboflow",
35
36
  "license": "ISC",