@fabric-harness/cloudflare 0.16.1 → 0.18.0

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.
@@ -1,10 +1,39 @@
1
1
  import { openAIChatCompletionToModelResponse, toOpenAIMessage, toOpenAITool, } from '@fabric-harness/sdk';
2
+ /**
3
+ * Map Fabric's ordinal `ThinkingLevel` to Cloudflare's shared
4
+ * `reasoning_effort` option, mirroring Flue: `minimal`/`low` → `low`,
5
+ * `medium` → `medium`, `high`/`xhigh` → `high`. `'off'` is handled by the
6
+ * caller (the field is omitted) and never reaches this function.
7
+ */
8
+ export function mapReasoningEffort(level) {
9
+ switch (level) {
10
+ case 'minimal':
11
+ case 'low':
12
+ return 'low';
13
+ case 'medium':
14
+ return 'medium';
15
+ case 'high':
16
+ case 'xhigh':
17
+ return 'high';
18
+ }
19
+ }
2
20
  /**
3
21
  * Reserved model-string prefix that routes through the Workers AI binding
4
22
  * provider. `init({ model: 'cloudflare/@cf/meta/llama-3.1-8b-instruct' })`
5
23
  * picks this provider when one is registered with the matching name.
6
24
  */
7
25
  export const CLOUDFLARE_WORKERS_AI_MODEL_PREFIX = 'cloudflare/';
26
+ export const BUILTIN_WORKERS_AI_MODEL_INFO = {
27
+ '@cf/meta/llama-3.1-8b-instruct': { contextWindowTokens: 8192, maxOutputTokens: 2048, supportsTools: true },
28
+ '@cf/meta/llama-3.1-70b-instruct': { contextWindowTokens: 8192, maxOutputTokens: 2048, supportsTools: true },
29
+ '@cf/meta/llama-3.1-8b-instruct-fast': { contextWindowTokens: 8192, maxOutputTokens: 2048, supportsTools: true },
30
+ '@cf/meta/llama-3.2-1b-instruct': { contextWindowTokens: 8192, maxOutputTokens: 2048, supportsTools: false },
31
+ '@cf/meta/llama-3.2-3b-instruct': { contextWindowTokens: 8192, maxOutputTokens: 2048, supportsTools: false },
32
+ '@cf/mistral/mistral-7b-instruct-v0.2-lora': { contextWindowTokens: 32768, maxOutputTokens: 2048, supportsTools: false },
33
+ // Reasoning-capable models accept a `reasoning_effort` control (see `thinkingLevel`).
34
+ '@cf/openai/gpt-oss-120b': { contextWindowTokens: 128000, supportsTools: true, supportsReasoning: true },
35
+ '@cf/openai/gpt-oss-20b': { contextWindowTokens: 128000, supportsTools: true, supportsReasoning: true },
36
+ };
8
37
  /**
9
38
  * Model provider that dispatches to Cloudflare Workers AI via the platform
10
39
  * binding (`env.AI.run()`) instead of HTTP. Use on a Cloudflare Workers
@@ -39,6 +68,8 @@ export class CloudflareWorkersAIModelProvider {
39
68
  binding;
40
69
  defaultModel;
41
70
  gateway;
71
+ defaultModelInfo;
72
+ models;
42
73
  constructor(options) {
43
74
  this.name = options.name ?? 'workers-ai';
44
75
  this.binding = options.binding;
@@ -46,6 +77,29 @@ export class CloudflareWorkersAIModelProvider {
46
77
  this.defaultModel = options.defaultModel;
47
78
  if (options.gateway !== undefined)
48
79
  this.gateway = options.gateway;
80
+ if (options.defaultModelInfo !== undefined)
81
+ this.defaultModelInfo = options.defaultModelInfo;
82
+ this.models = { ...BUILTIN_WORKERS_AI_MODEL_INFO, ...(options.models ?? {}) };
83
+ }
84
+ getModelMetadata(model) {
85
+ const requested = model ?? this.defaultModel;
86
+ if (!requested) {
87
+ return {
88
+ provider: this.name,
89
+ ...(this.gateway?.id ? { gateway: this.gateway.id } : {}),
90
+ };
91
+ }
92
+ const stripped = stripCloudflarePrefix(requested);
93
+ const info = this.models[stripped] ?? this.defaultModelInfo;
94
+ return {
95
+ provider: this.name,
96
+ model: stripped,
97
+ ...(info?.contextWindowTokens !== undefined ? { contextWindowTokens: info.contextWindowTokens } : {}),
98
+ ...(info?.maxOutputTokens !== undefined ? { maxOutputTokens: info.maxOutputTokens } : {}),
99
+ ...(info?.supportsTools !== undefined ? { supportsTools: info.supportsTools } : {}),
100
+ ...(info?.supportsReasoning !== undefined ? { supportsReasoning: info.supportsReasoning } : {}),
101
+ ...(this.gateway?.id ? { gateway: this.gateway.id } : {}),
102
+ };
49
103
  }
50
104
  async generate(request) {
51
105
  const requested = request.model ?? this.defaultModel;
@@ -59,6 +113,13 @@ export class CloudflareWorkersAIModelProvider {
59
113
  if (request.tools !== undefined) {
60
114
  body.tools = request.tools.map((t) => toOpenAITool(t));
61
115
  }
116
+ // Forward reasoning effort only for reasoning-capable models. Mirrors Flue's
117
+ // binding-backed Workers AI behavior; a level on a non-reasoning model (or
118
+ // `'off'`) is silently dropped rather than sent.
119
+ const modelInfo = this.models[model] ?? this.defaultModelInfo;
120
+ if (modelInfo?.supportsReasoning && request.thinkingLevel !== undefined && request.thinkingLevel !== 'off') {
121
+ body.reasoning_effort = mapReasoningEffort(request.thinkingLevel);
122
+ }
62
123
  const result = await this.binding.run(model, body, this.gateway ? { gateway: this.gateway } : undefined);
63
124
  return openAIChatCompletionToModelResponse(coerceCompletion(result));
64
125
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workers-ai.js","sourceRoot":"","sources":["../src/workers-ai.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mCAAmC,EACnC,eAAe,EACf,YAAY,GAOb,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,aAAa,CAAC;AAyChE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,OAAO,gCAAgC;IAClC,IAAI,CAAS;IACL,OAAO,CAAiC;IACxC,YAAY,CAAU;IACtB,OAAO,CAA0D;IAElF,YAAY,OAAgD;QAC1D,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACjF,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAqB;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC;QACrD,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAE/C,MAAM,IAAI,GAIN;YACF,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,EAAE,KAAK;SACd,CAAC;QACF,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAkB,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CACnC,KAAK,EACL,IAAI,EACJ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CACrD,CAAC;QAEF,OAAO,mCAAmC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,OAAO,KAAK,CAAC,UAAU,CAAC,kCAAkC,CAAC;QACzD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,CAAC,MAAM,CAAC;QACxD,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,KAA6B,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,MAAM,CAAE,KAA+B,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QACrE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;SAC1C,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"workers-ai.js","sourceRoot":"","sources":["../src/workers-ai.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fabric-harness/cloudflare",
3
- "version": "0.16.1",
3
+ "version": "0.18.0",
4
4
  "description": "Cloudflare Workers and Sandbox adapter for Fabric Harness.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Fabric",
@@ -38,9 +38,17 @@
38
38
  "types": "./dist/index.d.ts",
39
39
  "import": "./dist/index.js"
40
40
  },
41
+ "./agent": {
42
+ "types": "./dist/agent.d.ts",
43
+ "import": "./dist/agent.js"
44
+ },
41
45
  "./workers-ai": {
42
46
  "types": "./dist/workers-ai.d.ts",
43
47
  "import": "./dist/workers-ai.js"
48
+ },
49
+ "./shell": {
50
+ "types": "./dist/shell.d.ts",
51
+ "import": "./dist/shell.js"
44
52
  }
45
53
  },
46
54
  "files": [
@@ -49,7 +57,9 @@
49
57
  "LICENSE"
50
58
  ],
51
59
  "dependencies": {
52
- "@fabric-harness/sdk": "^1.12.1"
60
+ "@cloudflare/codemode": "^0.3.6",
61
+ "@cloudflare/shell": "^0.3.7",
62
+ "@fabric-harness/sdk": "^1.14.0"
53
63
  },
54
64
  "peerDependencies": {
55
65
  "@cloudflare/sandbox": "*"