@rudra-js/anthropic 0.1.0 → 0.3.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.
package/README.md CHANGED
@@ -4,10 +4,13 @@ An Anthropic adapter for
4
4
  [`@rudra-js/core`](https://github.com/clivedsouza1010/rudra-js/tree/main/packages/core)'s
5
5
  `ComponentProvider`.
6
6
 
7
+ > Anthropic and Claude are trademarks of Anthropic, PBC. This package is an
8
+ > independent adapter and is not affiliated with or endorsed by Anthropic.
9
+
7
10
  ## Install
8
11
 
9
12
  ```sh
10
- npm install @rudra-js/anthropic @rudra-js/core zod
13
+ npm install @rudra-js/anthropic @rudra-js/core zod@^4
11
14
  ```
12
15
 
13
16
  ```ts
@@ -18,14 +21,29 @@ const provider = createAnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY
18
21
  const generator = createComponentGenerator({ provider });
19
22
  ```
20
23
 
21
- `model` defaults to the current Claude model this package was written against;
22
- pass it to pin a different one. `maxTokens` and `baseUrl` are also optional.
24
+ `model` defaults to `claude-sonnet-5`, and `thinking` defaults to
25
+ `{ type: 'disabled' }`.
26
+
27
+ Both of those come from the same constraint. Generation runs on the request
28
+ path, inside `modelTimeoutMs`, which core defaults to 1500ms. A model that
29
+ reasons before it answers won't finish in time. Sonnet 5 reasons by default
30
+ when `thinking` is left out, so it's the leaving out that would break the
31
+ budget, not the choice of model.
32
+
33
+ Want a different model? Pass `model` to pin one, and raise `modelTimeoutMs` to
34
+ match while you're there. A quick heads-up on `thinking`: some models reject an
35
+ explicit `{ type: 'disabled' }` and reason whatever you do. Pass
36
+ `thinking: null` for those and we'll send no `thinking` field at all. Our
37
+ example shop pins `claude-opus-5` and gives `modelTimeoutMs` a full 60 seconds,
38
+ which is a demo talking, not a production setting.
39
+
40
+ `maxTokens` and `baseUrl` are optional too.
23
41
 
24
42
  ### An identity-linked key needs a workspace
25
43
 
26
- A key created against your identity rather than inside a workspace belongs to
27
- you across several of them, so the API cannot infer which one a request acts in
28
- and answers:
44
+ A key you made against your identity rather than inside a workspace belongs to
45
+ you across several of them. The API can't tell which one a request is acting in,
46
+ so it answers:
29
47
 
30
48
  ```
31
49
  400 invalid_request_error — anthropic-workspace-id is required when
@@ -41,13 +59,38 @@ createAnthropicProvider({
41
59
  });
42
60
  ```
43
61
 
44
- `fetch` is injectable, which is what the test suite uses in place of a network
45
- call.
62
+ `fetch` is injectable. That's how our test suite stands in for a network call.
63
+
64
+ The tool schema we send the model is derived from the `schema` on the
65
+ `ProviderRequest`, the same schema `@rudra-js/core` defines. We don't keep a
66
+ copy here. A second copy would be a second vocabulary, and then the reconciler
67
+ enforces one thing while the model is told another.
68
+
69
+ ## Data handling
70
+
71
+ Each generation is one POST to `https://api.anthropic.com/v1/messages`. Set
72
+ `baseUrl` and it goes to that host instead, whether that's a proxy, a gateway,
73
+ or a region-specific endpoint you have.
74
+
75
+ What's in that request is listed under **What the model sees** in the
76
+ [`@rudra-js/core` README](https://github.com/clivedsouza1010/rudra-js/tree/main/packages/core#what-the-model-sees).
77
+ Read it before you send real shopper traffic. In cohort mode, the default, the
78
+ request carries no individual. In per-shopper mode it carries that shopper's
79
+ likes, dislikes, purchases, basket, views and recent searches.
80
+
81
+ If your shop is in the EU or the UK, you're the one sending personal data to
82
+ Anthropic, so you'll need a data processing agreement with them plus a transfer
83
+ mechanism for the data leaving your region. Your shop is Anthropic's customer.
84
+ This package is a piece of code in the middle, and it _isn't_ a party to
85
+ anything.
46
86
 
47
- The tool schema sent to the model is derived from the `schema` on the
48
- `ProviderRequest` the same schema `@rudra-js/core` defines rather than a
49
- copy written out here. A second copy would be a second vocabulary: the
50
- reconciler would enforce one thing and the model would be told another.
87
+ When the API answers with an error, the `Error` we throw carries the status code
88
+ and the vendor's error category, like `anthropic responded 400
89
+ (invalid_request_error)`. We leave the vendor's own message out. It quotes the
90
+ request back, and for this framework the request can hold a shopper's search
91
+ terms, which an adopter's `console.error(error)` would then write to a log. A
92
+ test in `anthropic-provider.test.ts` puts a search term in that message and
93
+ asserts it does not reach the thrown error.
51
94
 
52
95
  ## Licence
53
96
 
@@ -11,6 +11,16 @@ export interface AnthropicProviderOptions {
11
11
  * infer which one a request acts in and rejects it with a 400.
12
12
  */
13
13
  workspaceId?: string;
14
+ /**
15
+ * Sent as the request's `thinking`. Defaults to `{ type: 'disabled' }`,
16
+ * because core budgets 1500ms for the whole call and a model that reasons
17
+ * before answering does not finish inside it. Pass `null` to send nothing,
18
+ * which is what a model that rejects an explicit `disabled` needs, and raise
19
+ * `modelTimeoutMs` to match when you do.
20
+ */
21
+ thinking?: {
22
+ type: 'adaptive' | 'disabled';
23
+ } | null;
14
24
  /** Injected so the adapter is testable without a network or an SDK. */
15
25
  fetch?: typeof globalThis.fetch;
16
26
  }
@@ -18,8 +28,8 @@ export interface AnthropicProviderOptions {
18
28
  * Adapts the Anthropic Messages API to `ComponentProvider`.
19
29
  *
20
30
  * The tool schema is derived from the schema core exports rather than restated
21
- * here: a second copy is a second vocabulary, and the drift shows up as
22
- * unexplained `invalid-generation` events.
31
+ * here: a second copy is a second vocabulary, and the drift would throw below
32
+ * and reach the generator as `provider-error` events.
23
33
  */
24
34
  export declare function createAnthropicProvider(options: AnthropicProviderOptions): ComponentProvider;
25
35
  //# sourceMappingURL=anthropic-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../src/anthropic-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EAIlB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AA0CD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CA6H5F"}
1
+ {"version":3,"file":"anthropic-provider.d.ts","sourceRoot":"","sources":["../src/anthropic-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EAIlB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;IACpD,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAyCD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CAgI5F"}
@@ -1,10 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  const TOOL_NAME = 'emit_component_spec';
3
3
  /**
4
- * This model runs adaptive thinking by default, and thinking draws on the
5
- * same output budget as the tool call. A cap too close to what reasoning
6
- * alone can spend leaves no room for the tool block, so the default is well
7
- * above a typical spec's size rather than tuned to it.
4
+ * A model that reasons before answering draws on the same output budget as the
5
+ * tool call, and a cap close to what a spec needs leaves no room for it. The
6
+ * default is well above a typical spec's size rather than tuned to it.
8
7
  */
9
8
  const DEFAULT_MAX_TOKENS = 8192;
10
9
  function describeShape(input) {
@@ -33,11 +32,12 @@ function isToolUseBlock(candidate) {
33
32
  * Adapts the Anthropic Messages API to `ComponentProvider`.
34
33
  *
35
34
  * The tool schema is derived from the schema core exports rather than restated
36
- * here: a second copy is a second vocabulary, and the drift shows up as
37
- * unexplained `invalid-generation` events.
35
+ * here: a second copy is a second vocabulary, and the drift would throw below
36
+ * and reach the generator as `provider-error` events.
38
37
  */
39
38
  export function createAnthropicProvider(options) {
40
- const model = options.model ?? 'claude-opus-5';
39
+ const model = options.model ?? 'claude-sonnet-5';
40
+ const thinking = options.thinking === undefined ? { type: 'disabled' } : options.thinking;
41
41
  const call = options.fetch ?? globalThis.fetch;
42
42
  // Trimmed so a caller-supplied `baseUrl` ending in `/` cannot turn into
43
43
  // `//v1/messages`. Done with a loop rather than `/\/+$/`: that pattern
@@ -71,6 +71,7 @@ export function createAnthropicProvider(options) {
71
71
  body: JSON.stringify({
72
72
  model,
73
73
  max_tokens: maxTokens,
74
+ ...(thinking ? { thinking } : {}),
74
75
  // Marked as the cached prefix. Anything per-shopper interpolated here
75
76
  // would destroy the prompt cache hit rate.
76
77
  system: [{ type: 'text', text: request.system, cache_control: { type: 'ephemeral' } }],
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic-provider.js","sourceRoot":"","sources":["../src/anthropic-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anthropic-provider.js","sourceRoot":"","sources":["../src/anthropic-provider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudra-js/anthropic",
3
- "version": "0.1.0",
3
+ "version": "0.3.1",
4
4
  "description": "An Anthropic adapter for @rudra-js/core, with no vendor SDK and no dependencies",
5
5
  "keywords": [
6
6
  "anthropic",
@@ -21,7 +21,7 @@
21
21
  "directory": "packages/anthropic"
22
22
  },
23
23
  "engines": {
24
- "node": "^20.19.0 || >=22.12.0"
24
+ "node": ">=22.12.0"
25
25
  },
26
26
  "type": "module",
27
27
  "main": "./dist/index.js",
@@ -47,11 +47,11 @@
47
47
  "access": "public"
48
48
  },
49
49
  "peerDependencies": {
50
- "@rudra-js/core": "^0.1.0",
51
- "zod": "^4.5.4"
50
+ "@rudra-js/core": "^0.3.1",
51
+ "zod": "^4.5.0"
52
52
  },
53
53
  "devDependencies": {
54
- "@rudra-js/core": "0.1.0",
54
+ "@rudra-js/core": "0.3.1",
55
55
  "zod": "^4.5.4"
56
56
  }
57
57
  }
@@ -18,6 +18,14 @@ export interface AnthropicProviderOptions {
18
18
  * infer which one a request acts in and rejects it with a 400.
19
19
  */
20
20
  workspaceId?: string;
21
+ /**
22
+ * Sent as the request's `thinking`. Defaults to `{ type: 'disabled' }`,
23
+ * because core budgets 1500ms for the whole call and a model that reasons
24
+ * before answering does not finish inside it. Pass `null` to send nothing,
25
+ * which is what a model that rejects an explicit `disabled` needs, and raise
26
+ * `modelTimeoutMs` to match when you do.
27
+ */
28
+ thinking?: { type: 'adaptive' | 'disabled' } | null;
21
29
  /** Injected so the adapter is testable without a network or an SDK. */
22
30
  fetch?: typeof globalThis.fetch;
23
31
  }
@@ -25,10 +33,9 @@ export interface AnthropicProviderOptions {
25
33
  const TOOL_NAME = 'emit_component_spec';
26
34
 
27
35
  /**
28
- * This model runs adaptive thinking by default, and thinking draws on the
29
- * same output budget as the tool call. A cap too close to what reasoning
30
- * alone can spend leaves no room for the tool block, so the default is well
31
- * above a typical spec's size rather than tuned to it.
36
+ * A model that reasons before answering draws on the same output budget as the
37
+ * tool call, and a cap close to what a spec needs leaves no room for it. The
38
+ * default is well above a typical spec's size rather than tuned to it.
32
39
  */
33
40
  const DEFAULT_MAX_TOKENS = 8192;
34
41
 
@@ -66,11 +73,13 @@ function isToolUseBlock(candidate: unknown): candidate is ToolUseBlock {
66
73
  * Adapts the Anthropic Messages API to `ComponentProvider`.
67
74
  *
68
75
  * The tool schema is derived from the schema core exports rather than restated
69
- * here: a second copy is a second vocabulary, and the drift shows up as
70
- * unexplained `invalid-generation` events.
76
+ * here: a second copy is a second vocabulary, and the drift would throw below
77
+ * and reach the generator as `provider-error` events.
71
78
  */
72
79
  export function createAnthropicProvider(options: AnthropicProviderOptions): ComponentProvider {
73
- const model = options.model ?? 'claude-opus-5';
80
+ const model = options.model ?? 'claude-sonnet-5';
81
+ const thinking =
82
+ options.thinking === undefined ? { type: 'disabled' as const } : options.thinking;
74
83
  const call = options.fetch ?? globalThis.fetch;
75
84
  // Trimmed so a caller-supplied `baseUrl` ending in `/` cannot turn into
76
85
  // `//v1/messages`. Done with a loop rather than `/\/+$/`: that pattern
@@ -106,6 +115,7 @@ export function createAnthropicProvider(options: AnthropicProviderOptions): Comp
106
115
  body: JSON.stringify({
107
116
  model,
108
117
  max_tokens: maxTokens,
118
+ ...(thinking ? { thinking } : {}),
109
119
  // Marked as the cached prefix. Anything per-shopper interpolated here
110
120
  // would destroy the prompt cache hit rate.
111
121
  system: [{ type: 'text', text: request.system, cache_control: { type: 'ephemeral' } }],