batchwork 0.0.0 → 1.0.1

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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/dist/batch.d.ts +27 -0
  4. package/dist/batch.d.ts.map +1 -0
  5. package/dist/body.d.ts +19 -0
  6. package/dist/body.d.ts.map +1 -0
  7. package/dist/chunk-e6qn48qa.js +301 -0
  8. package/dist/chunk-e6qn48qa.js.map +13 -0
  9. package/dist/chunk-g481f961.js +1212 -0
  10. package/dist/chunk-g481f961.js.map +26 -0
  11. package/dist/chunk-m4n610nm.js +338 -0
  12. package/dist/chunk-m4n610nm.js.map +12 -0
  13. package/dist/chunk-v0bahtg2.js +7 -0
  14. package/dist/chunk-v0bahtg2.js.map +9 -0
  15. package/dist/errors.d.ts +16 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/http.d.ts +5 -0
  18. package/dist/http.d.ts.map +1 -0
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +30 -0
  22. package/dist/index.js.map +9 -0
  23. package/dist/job.d.ts +31 -0
  24. package/dist/job.d.ts.map +1 -0
  25. package/dist/jsonl.d.ts +7 -0
  26. package/dist/jsonl.d.ts.map +1 -0
  27. package/dist/limits.d.ts +12 -0
  28. package/dist/limits.d.ts.map +1 -0
  29. package/dist/model.d.ts +32 -0
  30. package/dist/model.d.ts.map +1 -0
  31. package/dist/next/index.d.ts +61 -0
  32. package/dist/next/index.d.ts.map +1 -0
  33. package/dist/next/index.js +64 -0
  34. package/dist/next/index.js.map +10 -0
  35. package/dist/postgres/batch-store.d.ts +19 -0
  36. package/dist/postgres/batch-store.d.ts.map +1 -0
  37. package/dist/postgres/index.d.ts +6 -0
  38. package/dist/postgres/index.d.ts.map +1 -0
  39. package/dist/postgres/index.js +101 -0
  40. package/dist/postgres/index.js.map +12 -0
  41. package/dist/postgres/migrate.d.ts +15 -0
  42. package/dist/postgres/migrate.d.ts.map +1 -0
  43. package/dist/postgres/types.d.ts +26 -0
  44. package/dist/postgres/types.d.ts.map +1 -0
  45. package/dist/providers/adapter.d.ts +25 -0
  46. package/dist/providers/adapter.d.ts.map +1 -0
  47. package/dist/providers/anthropic.d.ts +3 -0
  48. package/dist/providers/anthropic.d.ts.map +1 -0
  49. package/dist/providers/google.d.ts +8 -0
  50. package/dist/providers/google.d.ts.map +1 -0
  51. package/dist/providers/groq.d.ts +8 -0
  52. package/dist/providers/groq.d.ts.map +1 -0
  53. package/dist/providers/ids.d.ts +3 -0
  54. package/dist/providers/ids.d.ts.map +1 -0
  55. package/dist/providers/index.d.ts +5 -0
  56. package/dist/providers/index.d.ts.map +1 -0
  57. package/dist/providers/mistral.d.ts +8 -0
  58. package/dist/providers/mistral.d.ts.map +1 -0
  59. package/dist/providers/openai-compatible.d.ts +41 -0
  60. package/dist/providers/openai-compatible.d.ts.map +1 -0
  61. package/dist/providers/openai.d.ts +7 -0
  62. package/dist/providers/openai.d.ts.map +1 -0
  63. package/dist/providers/shared.d.ts +23 -0
  64. package/dist/providers/shared.d.ts.map +1 -0
  65. package/dist/providers/together.d.ts +8 -0
  66. package/dist/providers/together.d.ts.map +1 -0
  67. package/dist/providers/xai.d.ts +8 -0
  68. package/dist/providers/xai.d.ts.map +1 -0
  69. package/dist/redis/batch-store.d.ts +15 -0
  70. package/dist/redis/batch-store.d.ts.map +1 -0
  71. package/dist/redis/index.d.ts +4 -0
  72. package/dist/redis/index.d.ts.map +1 -0
  73. package/dist/redis/index.js +55 -0
  74. package/dist/redis/index.js.map +11 -0
  75. package/dist/redis/types.d.ts +19 -0
  76. package/dist/redis/types.d.ts.map +1 -0
  77. package/dist/server/events.d.ts +5 -0
  78. package/dist/server/events.d.ts.map +1 -0
  79. package/dist/server/index.d.ts +7 -0
  80. package/dist/server/index.d.ts.map +1 -0
  81. package/dist/server/index.js +19 -0
  82. package/dist/server/index.js.map +9 -0
  83. package/dist/server/poller.d.ts +63 -0
  84. package/dist/server/poller.d.ts.map +1 -0
  85. package/dist/server/signing.d.ts +27 -0
  86. package/dist/server/signing.d.ts.map +1 -0
  87. package/dist/server/store.d.ts +4 -0
  88. package/dist/server/store.d.ts.map +1 -0
  89. package/dist/server/types.d.ts +37 -0
  90. package/dist/server/types.d.ts.map +1 -0
  91. package/dist/types.d.ts +125 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/util.d.ts +10 -0
  94. package/dist/util.d.ts.map +1 -0
  95. package/package.json +119 -7
@@ -0,0 +1,125 @@
1
+ import type { JSONValue, LanguageModel, ModelMessage, ToolChoice, ToolSet } from "ai";
2
+ /** Providers with a batch adapter. */
3
+ export type BatchProvider = "anthropic" | "google" | "groq" | "mistral" | "openai" | "together" | "xai";
4
+ /**
5
+ * Provider-specific options, forwarded verbatim into the underlying request
6
+ * body. Structurally identical to the AI SDK's `ProviderOptions`.
7
+ */
8
+ export type ProviderOptions = Record<string, Record<string, JSONValue>>;
9
+ /**
10
+ * Sampling and prompt-shaping fields shared with the AI SDK's `generateText`.
11
+ * Used both per request and as batch-wide defaults.
12
+ */
13
+ export interface BatchRequestSettings {
14
+ frequencyPenalty?: number;
15
+ maxOutputTokens?: number;
16
+ presencePenalty?: number;
17
+ providerOptions?: ProviderOptions;
18
+ seed?: number;
19
+ stopSequences?: string[];
20
+ system?: string;
21
+ temperature?: number;
22
+ toolChoice?: ToolChoice<ToolSet>;
23
+ tools?: ToolSet;
24
+ topK?: number;
25
+ topP?: number;
26
+ }
27
+ /**
28
+ * A single request within a batch. Mirrors the AI SDK `generateText` input
29
+ * (minus `model`), plus a `customId` used to correlate the result.
30
+ */
31
+ export interface BatchRequest extends BatchRequestSettings {
32
+ /** Correlates this request to its result. Auto-generated when omitted. */
33
+ customId?: string;
34
+ messages?: ModelMessage[];
35
+ prompt?: string;
36
+ }
37
+ /** Defaults merged into every request; request-level values take precedence. */
38
+ export type BatchDefaults = BatchRequestSettings;
39
+ /** Normalized batch lifecycle status, unified across providers. */
40
+ export type BatchStatus = "validating" | "in_progress" | "finalizing" | "completed" | "failed" | "expired" | "cancelling" | "cancelled";
41
+ /** Normalized per-request tallies. `completed` = succeeded, `failed` = errored. */
42
+ export interface BatchRequestCounts {
43
+ canceled?: number;
44
+ completed: number;
45
+ expired?: number;
46
+ failed: number;
47
+ processing?: number;
48
+ total: number;
49
+ }
50
+ /** Outcome of a single request within a batch. */
51
+ export type BatchResultStatus = "succeeded" | "errored" | "expired" | "canceled";
52
+ export interface BatchUsage {
53
+ inputTokens?: number;
54
+ outputTokens?: number;
55
+ totalTokens?: number;
56
+ }
57
+ export interface BatchResultError {
58
+ code?: string | number;
59
+ message: string;
60
+ type?: string;
61
+ }
62
+ /** A normalized result line, correlated by `customId`. */
63
+ export interface BatchResult {
64
+ customId: string;
65
+ /** Normalized error, present when `status` is `"errored"`. */
66
+ error?: BatchResultError;
67
+ /** Raw provider response body (OpenAI `response.body` / Anthropic message). */
68
+ response?: unknown;
69
+ status: BatchResultStatus;
70
+ /** Normalized text output, when the request produced a message. */
71
+ text?: string;
72
+ usage?: BatchUsage;
73
+ }
74
+ /** A point-in-time, normalized view of a batch's status. */
75
+ export interface BatchSnapshot {
76
+ completedAt?: Date;
77
+ createdAt?: Date;
78
+ expiresAt?: Date;
79
+ id: string;
80
+ provider: BatchProvider;
81
+ /** Raw provider status object. */
82
+ raw: unknown;
83
+ requestCounts: BatchRequestCounts;
84
+ status: BatchStatus;
85
+ }
86
+ /** Provider credentials and connection config. Falls back to env when omitted. */
87
+ export interface ProviderCredentials {
88
+ apiKey?: string;
89
+ baseURL?: string;
90
+ /** Extra provider-level HTTP headers (e.g. beta flags). */
91
+ headers?: Record<string, string>;
92
+ }
93
+ export interface BatchLimits {
94
+ captureConcurrency?: number;
95
+ maxRequests?: number;
96
+ maxRequestBytes?: number;
97
+ maxUploadBytes?: number;
98
+ }
99
+ /** Input to `batch()`. */
100
+ export interface BatchOptions extends ProviderCredentials {
101
+ defaults?: BatchDefaults;
102
+ limits?: BatchLimits;
103
+ metadata?: Record<string, string>;
104
+ model: LanguageModel;
105
+ requests: BatchRequest[];
106
+ }
107
+ /**
108
+ * Reference to an existing batch, used to rehydrate a handle. Identify the
109
+ * provider with either `model` or `provider` (e.g. from a webhook event).
110
+ */
111
+ export interface BatchRef extends ProviderCredentials {
112
+ id: string;
113
+ model?: LanguageModel;
114
+ provider?: BatchProvider;
115
+ }
116
+ export interface WaitOptions {
117
+ /** Invoked after every poll with the latest snapshot. */
118
+ onPoll?: (snapshot: BatchSnapshot) => void;
119
+ /** Delay between polls. Default 15000ms. */
120
+ pollIntervalMs?: number;
121
+ signal?: AbortSignal;
122
+ /** Give up after this long. Default: no timeout. */
123
+ timeoutMs?: number;
124
+ }
125
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ /** Small, defensive helpers for reading loosely-typed provider JSON. */
2
+ export declare const asRecord: (value: unknown) => Record<string, unknown>;
3
+ export declare const asString: (value: unknown) => string | undefined;
4
+ export declare const asNumber: (value: unknown) => number | undefined;
5
+ export declare const asArray: (value: unknown) => unknown[];
6
+ /** Return a shallow copy of `obj` without `key`. */
7
+ export declare const omit: (obj: Record<string, unknown>, key: string) => Record<string, unknown>;
8
+ /** Coerce a provider timestamp (ISO string or unix seconds) to a `Date`. */
9
+ export declare const toDate: (value: unknown) => Date | undefined;
10
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAK/D,CAAC;AAEF,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,MAAM,GAAG,SACJ,CAAC;AAEhD,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,MAAM,GAAG,SACJ,CAAC;AAEhD,eAAO,MAAM,OAAO,UAAW,OAAO,KAAG,OAAO,EACb,CAAC;AAEpC,oDAAoD;AACpD,eAAO,MAAM,IAAI,QACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OACvB,MAAM,KACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAQxB,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,IAAI,GAAG,SAO9C,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,124 @@
1
1
  {
2
2
  "name": "batchwork",
3
- "version": "0.0.0",
4
- "description": "",
5
- "license": "ISC",
6
- "author": "",
7
- "type": "commonjs",
8
- "main": "index.js",
3
+ "version": "1.0.1",
4
+ "description": "Unified batch API for AI providers — low-cost LLM batch processing at scale.",
5
+ "keywords": [
6
+ "ai",
7
+ "ai-sdk",
8
+ "anthropic",
9
+ "batch",
10
+ "llm",
11
+ "openai",
12
+ "vercel"
13
+ ],
14
+ "homepage": "https://github.com/haydenbleasel/batchwork#readme",
15
+ "bugs": {
16
+ "url": "https://github.com/haydenbleasel/batchwork/issues"
17
+ },
18
+ "license": "MIT",
19
+ "author": "Hayden Bleasel",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/haydenbleasel/batchwork.git",
23
+ "directory": "packages/batchwork"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "type": "module",
29
+ "main": "./dist/index.js",
30
+ "module": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.js"
36
+ },
37
+ "./server": {
38
+ "types": "./dist/server/index.d.ts",
39
+ "import": "./dist/server/index.js"
40
+ },
41
+ "./next": {
42
+ "types": "./dist/next/index.d.ts",
43
+ "import": "./dist/next/index.js"
44
+ },
45
+ "./postgres": {
46
+ "types": "./dist/postgres/index.d.ts",
47
+ "import": "./dist/postgres/index.js"
48
+ },
49
+ "./redis": {
50
+ "types": "./dist/redis/index.d.ts",
51
+ "import": "./dist/redis/index.js"
52
+ }
53
+ },
54
+ "publishConfig": {
55
+ "access": "public"
56
+ },
9
57
  "scripts": {
10
- "test": "echo \"Error: no test specified\" && exit 1"
58
+ "build": "bun run scripts/build.ts",
59
+ "dev": "bun run scripts/build.ts --watch",
60
+ "typecheck": "tsgo --noEmit && tsgo --noEmit -p tsconfig.bun.json",
61
+ "test": "bun test ./test",
62
+ "test:coverage": "bun test ./test --coverage",
63
+ "test:live": "bun test --env-file=.env.local ./live"
64
+ },
65
+ "dependencies": {
66
+ "ai": "^6.0.204"
67
+ },
68
+ "devDependencies": {
69
+ "@ai-sdk/anthropic": "^3.0.84",
70
+ "@ai-sdk/google": "^3.0.82",
71
+ "@ai-sdk/groq": "^3.0.41",
72
+ "@ai-sdk/mistral": "^3.0.39",
73
+ "@ai-sdk/openai": "^3.0.71",
74
+ "@ai-sdk/togetherai": "^2.0.55",
75
+ "@ai-sdk/xai": "^3.0.95",
76
+ "@electric-sql/pglite": "^0.5.2",
77
+ "@types/bun": "^1.3.14",
78
+ "@types/node": "^25.9.3",
79
+ "@types/pg": "^8.20.0",
80
+ "@typescript/native-preview": "^7.0.0-dev.20260613.1",
81
+ "@upstash/redis": "^1.38.0",
82
+ "pg": "^8.21.0",
83
+ "typescript": "^6.0.3"
84
+ },
85
+ "peerDependencies": {
86
+ "@ai-sdk/anthropic": ">=3",
87
+ "@ai-sdk/google": ">=3",
88
+ "@ai-sdk/groq": ">=3",
89
+ "@ai-sdk/mistral": ">=3",
90
+ "@ai-sdk/openai": ">=3",
91
+ "@ai-sdk/togetherai": ">=2",
92
+ "@ai-sdk/xai": ">=3",
93
+ "@upstash/redis": ">=1"
94
+ },
95
+ "peerDependenciesMeta": {
96
+ "@upstash/redis": {
97
+ "optional": true
98
+ },
99
+ "@ai-sdk/anthropic": {
100
+ "optional": true
101
+ },
102
+ "@ai-sdk/google": {
103
+ "optional": true
104
+ },
105
+ "@ai-sdk/groq": {
106
+ "optional": true
107
+ },
108
+ "@ai-sdk/mistral": {
109
+ "optional": true
110
+ },
111
+ "@ai-sdk/openai": {
112
+ "optional": true
113
+ },
114
+ "@ai-sdk/togetherai": {
115
+ "optional": true
116
+ },
117
+ "@ai-sdk/xai": {
118
+ "optional": true
119
+ }
120
+ },
121
+ "engines": {
122
+ "node": ">=20"
11
123
  }
12
124
  }