@tanstack/ai-cloudflare 0.1.2 → 0.1.5
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/esm/adapters/evaluate.d.ts +35 -0
- package/dist/esm/adapters/evaluate.js +74 -0
- package/dist/esm/adapters/evaluate.js.map +1 -0
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/utils/models.d.ts +5 -0
- package/package.json +5 -5
- package/src/adapters/evaluate.ts +98 -0
- package/src/index.ts +7 -0
- package/src/utils/models.ts +6 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BaseEvaluateAdapter, EvaluateOptions, WireAnswer } from '@tanstack/ai/adapters';
|
|
2
|
+
import { CloudflareConfig, CloudflareConfigInput } from '../utils/config.js';
|
|
3
|
+
import { CloudflareEvaluateModel } from '../utils/models.js';
|
|
4
|
+
/**
|
|
5
|
+
* Cloudflare evaluate adapter. Runs TypeSafe Jev (`typesafe/jev`) through
|
|
6
|
+
* Workers AI (`{ state, questions }` in, `{ model, answers, usage }` out)
|
|
7
|
+
* through the binding or the REST API.
|
|
8
|
+
*/
|
|
9
|
+
export declare class CloudflareEvaluateAdapter<TModel extends CloudflareEvaluateModel> extends BaseEvaluateAdapter<TModel> {
|
|
10
|
+
private readonly cfConfig;
|
|
11
|
+
readonly name: "cloudflare";
|
|
12
|
+
constructor(cfConfig: CloudflareConfig, model: TModel);
|
|
13
|
+
evaluate(options: EvaluateOptions): Promise<{
|
|
14
|
+
model: string;
|
|
15
|
+
answers: Record<string, WireAnswer>;
|
|
16
|
+
usage: import('@tanstack/ai-event-client').TokenUsage<import('@tanstack/ai-event-client').ProviderUsageDetails>;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a Cloudflare evaluate adapter with explicit configuration.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Inside a Worker
|
|
25
|
+
* const adapter = createCloudflareDecider('typesafe/jev', { binding: env.AI })
|
|
26
|
+
* // Anywhere, over REST
|
|
27
|
+
* const adapter = createCloudflareDecider('typesafe/jev', { accountId, apiKey })
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function createCloudflareDecider<TModel extends CloudflareEvaluateModel>(model: TModel, config: CloudflareConfig): CloudflareEvaluateAdapter<TModel>;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a Cloudflare evaluate adapter, reading `CLOUDFLARE_ACCOUNT_ID` and
|
|
33
|
+
* `CLOUDFLARE_API_TOKEN` from the environment unless a binding is passed.
|
|
34
|
+
*/
|
|
35
|
+
export declare function cloudflareDecider<TModel extends CloudflareEvaluateModel>(model: TModel, config?: CloudflareConfigInput): CloudflareEvaluateAdapter<TModel>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { resolveConfigFromEnv } from "../utils/config.js";
|
|
2
|
+
import { runModel } from "../utils/run.js";
|
|
3
|
+
import { BaseEvaluateAdapter } from "@tanstack/ai/adapters";
|
|
4
|
+
import { toRunErrorPayload } from "@tanstack/ai/adapter-internals";
|
|
5
|
+
import { buildBaseUsage } from "@tanstack/ai";
|
|
6
|
+
//#region src/adapters/evaluate.ts
|
|
7
|
+
/**
|
|
8
|
+
* Cloudflare evaluate adapter. Runs TypeSafe Jev (`typesafe/jev`) through
|
|
9
|
+
* Workers AI (`{ state, questions }` in, `{ model, answers, usage }` out)
|
|
10
|
+
* through the binding or the REST API.
|
|
11
|
+
*/
|
|
12
|
+
var CloudflareEvaluateAdapter = class extends BaseEvaluateAdapter {
|
|
13
|
+
cfConfig;
|
|
14
|
+
name = "cloudflare";
|
|
15
|
+
constructor(cfConfig, model) {
|
|
16
|
+
super({}, model);
|
|
17
|
+
this.cfConfig = cfConfig;
|
|
18
|
+
}
|
|
19
|
+
async evaluate(options) {
|
|
20
|
+
const { model, state, questions, abortSignal, logger } = options;
|
|
21
|
+
try {
|
|
22
|
+
logger.request(`activity=evaluate provider=${this.name} model=${model}`, {
|
|
23
|
+
provider: this.name,
|
|
24
|
+
model
|
|
25
|
+
});
|
|
26
|
+
const output = await runModel(this.cfConfig, model, {
|
|
27
|
+
state,
|
|
28
|
+
questions
|
|
29
|
+
}, { signal: abortSignal });
|
|
30
|
+
const inputTokens = output.usage.input_tokens;
|
|
31
|
+
const outputTokens = output.usage.output_tokens;
|
|
32
|
+
return {
|
|
33
|
+
model: output.model,
|
|
34
|
+
answers: output.answers,
|
|
35
|
+
usage: buildBaseUsage({
|
|
36
|
+
promptTokens: inputTokens,
|
|
37
|
+
completionTokens: outputTokens,
|
|
38
|
+
totalTokens: inputTokens + outputTokens
|
|
39
|
+
})
|
|
40
|
+
};
|
|
41
|
+
} catch (error) {
|
|
42
|
+
logger.errors(`${this.name}.evaluate fatal`, {
|
|
43
|
+
error: toRunErrorPayload(error, `${this.name}.evaluate failed`),
|
|
44
|
+
source: `${this.name}.evaluate`
|
|
45
|
+
});
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Creates a Cloudflare evaluate adapter with explicit configuration.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* // Inside a Worker
|
|
56
|
+
* const adapter = createCloudflareDecider('typesafe/jev', { binding: env.AI })
|
|
57
|
+
* // Anywhere, over REST
|
|
58
|
+
* const adapter = createCloudflareDecider('typesafe/jev', { accountId, apiKey })
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
function createCloudflareDecider(model, config) {
|
|
62
|
+
return new CloudflareEvaluateAdapter(config, model);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Creates a Cloudflare evaluate adapter, reading `CLOUDFLARE_ACCOUNT_ID` and
|
|
66
|
+
* `CLOUDFLARE_API_TOKEN` from the environment unless a binding is passed.
|
|
67
|
+
*/
|
|
68
|
+
function cloudflareDecider(model, config) {
|
|
69
|
+
return new CloudflareEvaluateAdapter(resolveConfigFromEnv(config), model);
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
export { CloudflareEvaluateAdapter, cloudflareDecider, createCloudflareDecider };
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=evaluate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.js","names":[],"sources":["../../../src/adapters/evaluate.ts"],"sourcesContent":["import { BaseEvaluateAdapter } from '@tanstack/ai/adapters'\nimport { toRunErrorPayload } from '@tanstack/ai/adapter-internals'\nimport { buildBaseUsage } from '@tanstack/ai'\nimport { resolveConfigFromEnv } from '../utils/config'\nimport { runModel } from '../utils/run'\nimport type { EvaluateOptions, WireAnswer } from '@tanstack/ai/adapters'\nimport type { CloudflareConfig, CloudflareConfigInput } from '../utils/config'\nimport type { CloudflareEvaluateModel } from '../utils/models'\n\n/** TypeSafe-shaped Workers AI evaluate output. */\ninterface CloudflareEvaluateOutput {\n model: string\n answers: Record<string, WireAnswer>\n usage: {\n input_tokens: number\n output_tokens: number\n }\n}\n\n/**\n * Cloudflare evaluate adapter. Runs TypeSafe Jev (`typesafe/jev`) through\n * Workers AI (`{ state, questions }` in, `{ model, answers, usage }` out)\n * through the binding or the REST API.\n */\nexport class CloudflareEvaluateAdapter<\n TModel extends CloudflareEvaluateModel,\n> extends BaseEvaluateAdapter<TModel> {\n readonly name = 'cloudflare' as const\n\n constructor(\n private readonly cfConfig: CloudflareConfig,\n model: TModel,\n ) {\n super({}, model)\n }\n\n async evaluate(options: EvaluateOptions) {\n const { model, state, questions, abortSignal, logger } = options\n try {\n logger.request(`activity=evaluate provider=${this.name} model=${model}`, {\n provider: this.name,\n model,\n })\n const output = (await runModel(\n this.cfConfig,\n model,\n { state, questions },\n { signal: abortSignal },\n )) as CloudflareEvaluateOutput\n const inputTokens = output.usage.input_tokens\n const outputTokens = output.usage.output_tokens\n return {\n model: output.model,\n answers: output.answers,\n usage: buildBaseUsage({\n promptTokens: inputTokens,\n completionTokens: outputTokens,\n totalTokens: inputTokens + outputTokens,\n }),\n }\n } catch (error: unknown) {\n logger.errors(`${this.name}.evaluate fatal`, {\n error: toRunErrorPayload(error, `${this.name}.evaluate failed`),\n source: `${this.name}.evaluate`,\n })\n throw error\n }\n }\n}\n\n/**\n * Creates a Cloudflare evaluate adapter with explicit configuration.\n *\n * @example\n * ```typescript\n * // Inside a Worker\n * const adapter = createCloudflareDecider('typesafe/jev', { binding: env.AI })\n * // Anywhere, over REST\n * const adapter = createCloudflareDecider('typesafe/jev', { accountId, apiKey })\n * ```\n */\nexport function createCloudflareDecider<TModel extends CloudflareEvaluateModel>(\n model: TModel,\n config: CloudflareConfig,\n) {\n return new CloudflareEvaluateAdapter(config, model)\n}\n\n/**\n * Creates a Cloudflare evaluate adapter, reading `CLOUDFLARE_ACCOUNT_ID` and\n * `CLOUDFLARE_API_TOKEN` from the environment unless a binding is passed.\n */\nexport function cloudflareDecider<TModel extends CloudflareEvaluateModel>(\n model: TModel,\n config?: CloudflareConfigInput,\n) {\n return new CloudflareEvaluateAdapter(resolveConfigFromEnv(config), model)\n}\n"],"mappings":";;;;;;;;;;;AAwBA,IAAa,4BAAb,cAEU,oBAA4B;CAIjB;CAHnB,OAAgB;CAEhB,YACE,UACA,OACA;EACA,MAAM,CAAC,GAAG,KAAK;EAHE,KAAA,WAAA;CAInB;CAEA,MAAM,SAAS,SAA0B;EACvC,MAAM,EAAE,OAAO,OAAO,WAAW,aAAa,WAAW;EACzD,IAAI;GACF,OAAO,QAAQ,8BAA8B,KAAK,KAAK,SAAS,SAAS;IACvE,UAAU,KAAK;IACf;GACF,CAAC;GACD,MAAM,SAAU,MAAM,SACpB,KAAK,UACL,OACA;IAAE;IAAO;GAAU,GACnB,EAAE,QAAQ,YAAY,CACxB;GACA,MAAM,cAAc,OAAO,MAAM;GACjC,MAAM,eAAe,OAAO,MAAM;GAClC,OAAO;IACL,OAAO,OAAO;IACd,SAAS,OAAO;IAChB,OAAO,eAAe;KACpB,cAAc;KACd,kBAAkB;KAClB,aAAa,cAAc;IAC7B,CAAC;GACH;EACF,SAAS,OAAgB;GACvB,OAAO,OAAO,GAAG,KAAK,KAAK,kBAAkB;IAC3C,OAAO,kBAAkB,OAAO,GAAG,KAAK,KAAK,iBAAiB;IAC9D,QAAQ,GAAG,KAAK,KAAK;GACvB,CAAC;GACD,MAAM;EACR;CACF;AACF;;;;;;;;;;;;AAaA,SAAgB,wBACd,OACA,QACA;CACA,OAAO,IAAI,0BAA0B,QAAQ,KAAK;AACpD;;;;;AAMA,SAAgB,kBACd,OACA,QACA;CACA,OAAO,IAAI,0BAA0B,qBAAqB,MAAM,GAAG,KAAK;AAC1E"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
export { CloudflareTextAdapter, createCloudflareText, cloudflareText, type CloudflareTextProviderOptions, } from './adapters/text.js';
|
|
9
9
|
export { createCloudflareSummarize, cloudflareSummarize, type CloudflareSummarizeModel, } from './adapters/summarize.js';
|
|
10
10
|
export { CloudflareEmbeddingAdapter, createCloudflareEmbedding, cloudflareEmbedding, type CloudflareEmbeddingProviderOptions, } from './adapters/embedding.js';
|
|
11
|
+
export { CloudflareEvaluateAdapter, createCloudflareDecider, cloudflareDecider, } from './adapters/evaluate.js';
|
|
11
12
|
export { CloudflareImageAdapter, createCloudflareImage, cloudflareImage, type CloudflareImageProviderOptions, } from './adapters/image.js';
|
|
12
13
|
export { CloudflareTTSAdapter, createCloudflareTTS, cloudflareTTS, type CloudflareTTSProviderOptions, } from './adapters/tts.js';
|
|
13
14
|
export { CloudflareTranscriptionAdapter, createCloudflareTranscription, cloudflareTranscription, type CloudflareTranscriptionProviderOptions, } from './adapters/transcription.js';
|
|
14
15
|
export { cloudflareGateway, type CloudflareGatewayTarget } from './gateway.js';
|
|
15
16
|
export type { CloudflareBindingConfig, CloudflareConfig, CloudflareConfigInput, CloudflareGatewayOptions, CloudflareRestConfig, CloudflareTextConfig, CloudflareTextRestConfig, } from './utils/config.js';
|
|
16
|
-
export type { CloudflareEmbeddingModel, CloudflareImageModel, CloudflareTextModel, CloudflareTranscriptionModel, CloudflareTTSModel, } from './utils/models.js';
|
|
17
|
+
export type { CloudflareEmbeddingModel, CloudflareEvaluateModel, CloudflareImageModel, CloudflareTextModel, CloudflareTranscriptionModel, CloudflareTTSModel, } from './utils/models.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { CloudflareTextAdapter, cloudflareText, createCloudflareText } from "./adapters/text.js";
|
|
2
2
|
import { cloudflareSummarize, createCloudflareSummarize } from "./adapters/summarize.js";
|
|
3
3
|
import { CloudflareEmbeddingAdapter, cloudflareEmbedding, createCloudflareEmbedding } from "./adapters/embedding.js";
|
|
4
|
+
import { CloudflareEvaluateAdapter, cloudflareDecider, createCloudflareDecider } from "./adapters/evaluate.js";
|
|
4
5
|
import { CloudflareImageAdapter, cloudflareImage, createCloudflareImage } from "./adapters/image.js";
|
|
5
6
|
import { CloudflareTTSAdapter, cloudflareTTS, createCloudflareTTS } from "./adapters/tts.js";
|
|
6
7
|
import { CloudflareTranscriptionAdapter, cloudflareTranscription, createCloudflareTranscription } from "./adapters/transcription.js";
|
|
7
8
|
import { cloudflareGateway } from "./gateway.js";
|
|
8
|
-
export { CloudflareEmbeddingAdapter, CloudflareImageAdapter, CloudflareTTSAdapter, CloudflareTextAdapter, CloudflareTranscriptionAdapter, cloudflareEmbedding, cloudflareGateway, cloudflareImage, cloudflareSummarize, cloudflareTTS, cloudflareText, cloudflareTranscription, createCloudflareEmbedding, createCloudflareImage, createCloudflareSummarize, createCloudflareTTS, createCloudflareText, createCloudflareTranscription };
|
|
9
|
+
export { CloudflareEmbeddingAdapter, CloudflareEvaluateAdapter, CloudflareImageAdapter, CloudflareTTSAdapter, CloudflareTextAdapter, CloudflareTranscriptionAdapter, cloudflareDecider, cloudflareEmbedding, cloudflareGateway, cloudflareImage, cloudflareSummarize, cloudflareTTS, cloudflareText, cloudflareTranscription, createCloudflareDecider, createCloudflareEmbedding, createCloudflareImage, createCloudflareSummarize, createCloudflareTTS, createCloudflareText, createCloudflareTranscription };
|
|
@@ -13,4 +13,9 @@ export type CloudflareEmbeddingModel = ModelsFor<BaseAiTextEmbeddings> | (string
|
|
|
13
13
|
export type CloudflareImageModel = ModelsFor<BaseAiTextToImage> | (string & {});
|
|
14
14
|
export type CloudflareTTSModel = ModelsFor<BaseAiTextToSpeech> | '@cf/deepgram/aura-1' | '@cf/deepgram/aura-2-en' | '@cf/deepgram/aura-2-es' | (string & {});
|
|
15
15
|
export type CloudflareTranscriptionModel = ModelsFor<BaseAiAutomaticSpeechRecognition> | '@cf/openai/whisper-large-v3-turbo' | '@cf/deepgram/nova-3' | (string & {});
|
|
16
|
+
/**
|
|
17
|
+
* Evaluate model id. TypeSafe Jev on Workers AI is `typesafe/jev`.
|
|
18
|
+
* Any other id works too.
|
|
19
|
+
*/
|
|
20
|
+
export type CloudflareEvaluateModel = 'typesafe/jev' | (string & {});
|
|
16
21
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/ai-cloudflare",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Cloudflare adapter for TanStack AI — Workers AI chat, embeddings, images, speech, transcription, and summarization over the AI binding or REST, with AI Gateway routing for any provider.",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -56,16 +56,16 @@
|
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@cloudflare/workers-types": "^4.20260317.1",
|
|
58
58
|
"openai": "^6.41.0",
|
|
59
|
-
"@tanstack/ai-utils": "^0.4.
|
|
60
|
-
"@tanstack/openai-base": "^0.10.
|
|
59
|
+
"@tanstack/ai-utils": "^0.4.1",
|
|
60
|
+
"@tanstack/openai-base": "^0.10.15"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@vitest/coverage-v8": "4.1.10",
|
|
64
64
|
"vite": "^8.2.1",
|
|
65
|
-
"@tanstack/ai": "0.
|
|
65
|
+
"@tanstack/ai": "0.58.0"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
68
|
-
"@tanstack/ai": "^0.
|
|
68
|
+
"@tanstack/ai": "^0.58.0"
|
|
69
69
|
},
|
|
70
70
|
"scripts": {
|
|
71
71
|
"build": "vite build",
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { BaseEvaluateAdapter } from '@tanstack/ai/adapters'
|
|
2
|
+
import { toRunErrorPayload } from '@tanstack/ai/adapter-internals'
|
|
3
|
+
import { buildBaseUsage } from '@tanstack/ai'
|
|
4
|
+
import { resolveConfigFromEnv } from '../utils/config'
|
|
5
|
+
import { runModel } from '../utils/run'
|
|
6
|
+
import type { EvaluateOptions, WireAnswer } from '@tanstack/ai/adapters'
|
|
7
|
+
import type { CloudflareConfig, CloudflareConfigInput } from '../utils/config'
|
|
8
|
+
import type { CloudflareEvaluateModel } from '../utils/models'
|
|
9
|
+
|
|
10
|
+
/** TypeSafe-shaped Workers AI evaluate output. */
|
|
11
|
+
interface CloudflareEvaluateOutput {
|
|
12
|
+
model: string
|
|
13
|
+
answers: Record<string, WireAnswer>
|
|
14
|
+
usage: {
|
|
15
|
+
input_tokens: number
|
|
16
|
+
output_tokens: number
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Cloudflare evaluate adapter. Runs TypeSafe Jev (`typesafe/jev`) through
|
|
22
|
+
* Workers AI (`{ state, questions }` in, `{ model, answers, usage }` out)
|
|
23
|
+
* through the binding or the REST API.
|
|
24
|
+
*/
|
|
25
|
+
export class CloudflareEvaluateAdapter<
|
|
26
|
+
TModel extends CloudflareEvaluateModel,
|
|
27
|
+
> extends BaseEvaluateAdapter<TModel> {
|
|
28
|
+
readonly name = 'cloudflare' as const
|
|
29
|
+
|
|
30
|
+
constructor(
|
|
31
|
+
private readonly cfConfig: CloudflareConfig,
|
|
32
|
+
model: TModel,
|
|
33
|
+
) {
|
|
34
|
+
super({}, model)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async evaluate(options: EvaluateOptions) {
|
|
38
|
+
const { model, state, questions, abortSignal, logger } = options
|
|
39
|
+
try {
|
|
40
|
+
logger.request(`activity=evaluate provider=${this.name} model=${model}`, {
|
|
41
|
+
provider: this.name,
|
|
42
|
+
model,
|
|
43
|
+
})
|
|
44
|
+
const output = (await runModel(
|
|
45
|
+
this.cfConfig,
|
|
46
|
+
model,
|
|
47
|
+
{ state, questions },
|
|
48
|
+
{ signal: abortSignal },
|
|
49
|
+
)) as CloudflareEvaluateOutput
|
|
50
|
+
const inputTokens = output.usage.input_tokens
|
|
51
|
+
const outputTokens = output.usage.output_tokens
|
|
52
|
+
return {
|
|
53
|
+
model: output.model,
|
|
54
|
+
answers: output.answers,
|
|
55
|
+
usage: buildBaseUsage({
|
|
56
|
+
promptTokens: inputTokens,
|
|
57
|
+
completionTokens: outputTokens,
|
|
58
|
+
totalTokens: inputTokens + outputTokens,
|
|
59
|
+
}),
|
|
60
|
+
}
|
|
61
|
+
} catch (error: unknown) {
|
|
62
|
+
logger.errors(`${this.name}.evaluate fatal`, {
|
|
63
|
+
error: toRunErrorPayload(error, `${this.name}.evaluate failed`),
|
|
64
|
+
source: `${this.name}.evaluate`,
|
|
65
|
+
})
|
|
66
|
+
throw error
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Creates a Cloudflare evaluate adapter with explicit configuration.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* // Inside a Worker
|
|
77
|
+
* const adapter = createCloudflareDecider('typesafe/jev', { binding: env.AI })
|
|
78
|
+
* // Anywhere, over REST
|
|
79
|
+
* const adapter = createCloudflareDecider('typesafe/jev', { accountId, apiKey })
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export function createCloudflareDecider<TModel extends CloudflareEvaluateModel>(
|
|
83
|
+
model: TModel,
|
|
84
|
+
config: CloudflareConfig,
|
|
85
|
+
) {
|
|
86
|
+
return new CloudflareEvaluateAdapter(config, model)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Creates a Cloudflare evaluate adapter, reading `CLOUDFLARE_ACCOUNT_ID` and
|
|
91
|
+
* `CLOUDFLARE_API_TOKEN` from the environment unless a binding is passed.
|
|
92
|
+
*/
|
|
93
|
+
export function cloudflareDecider<TModel extends CloudflareEvaluateModel>(
|
|
94
|
+
model: TModel,
|
|
95
|
+
config?: CloudflareConfigInput,
|
|
96
|
+
) {
|
|
97
|
+
return new CloudflareEvaluateAdapter(resolveConfigFromEnv(config), model)
|
|
98
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -26,6 +26,12 @@ export {
|
|
|
26
26
|
type CloudflareEmbeddingProviderOptions,
|
|
27
27
|
} from './adapters/embedding'
|
|
28
28
|
|
|
29
|
+
export {
|
|
30
|
+
CloudflareEvaluateAdapter,
|
|
31
|
+
createCloudflareDecider,
|
|
32
|
+
cloudflareDecider,
|
|
33
|
+
} from './adapters/evaluate'
|
|
34
|
+
|
|
29
35
|
export {
|
|
30
36
|
CloudflareImageAdapter,
|
|
31
37
|
createCloudflareImage,
|
|
@@ -61,6 +67,7 @@ export type {
|
|
|
61
67
|
|
|
62
68
|
export type {
|
|
63
69
|
CloudflareEmbeddingModel,
|
|
70
|
+
CloudflareEvaluateModel,
|
|
64
71
|
CloudflareImageModel,
|
|
65
72
|
CloudflareTextModel,
|
|
66
73
|
CloudflareTranscriptionModel,
|
package/src/utils/models.ts
CHANGED
|
@@ -39,3 +39,9 @@ export type CloudflareTranscriptionModel =
|
|
|
39
39
|
| '@cf/openai/whisper-large-v3-turbo'
|
|
40
40
|
| '@cf/deepgram/nova-3'
|
|
41
41
|
| (string & {})
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Evaluate model id. TypeSafe Jev on Workers AI is `typesafe/jev`.
|
|
45
|
+
* Any other id works too.
|
|
46
|
+
*/
|
|
47
|
+
export type CloudflareEvaluateModel = 'typesafe/jev' | (string & {})
|