jevascript 0.1.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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +447 -0
  3. package/dist/cache.d.ts +18 -0
  4. package/dist/cache.d.ts.map +1 -0
  5. package/dist/cache.js +58 -0
  6. package/dist/cache.js.map +1 -0
  7. package/dist/collections.d.ts +52 -0
  8. package/dist/collections.d.ts.map +1 -0
  9. package/dist/collections.js +206 -0
  10. package/dist/collections.js.map +1 -0
  11. package/dist/config.d.ts +57 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +75 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/context.d.ts +73 -0
  16. package/dist/context.d.ts.map +1 -0
  17. package/dist/context.js +251 -0
  18. package/dist/context.js.map +1 -0
  19. package/dist/define.d.ts +52 -0
  20. package/dist/define.d.ts.map +1 -0
  21. package/dist/define.js +59 -0
  22. package/dist/define.js.map +1 -0
  23. package/dist/errors.d.ts +28 -0
  24. package/dist/errors.d.ts.map +1 -0
  25. package/dist/errors.js +56 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/evaluate.d.ts +31 -0
  28. package/dist/evaluate.d.ts.map +1 -0
  29. package/dist/evaluate.js +142 -0
  30. package/dist/evaluate.js.map +1 -0
  31. package/dist/factory.d.ts +6 -0
  32. package/dist/factory.d.ts.map +1 -0
  33. package/dist/factory.js +7 -0
  34. package/dist/factory.js.map +1 -0
  35. package/dist/index.d.ts +68 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +53 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/internal.d.ts +3 -0
  40. package/dist/internal.d.ts.map +1 -0
  41. package/dist/internal.js +6 -0
  42. package/dist/internal.js.map +1 -0
  43. package/dist/outputs.d.ts +40 -0
  44. package/dist/outputs.d.ts.map +1 -0
  45. package/dist/outputs.js +20 -0
  46. package/dist/outputs.js.map +1 -0
  47. package/dist/providers/jev.d.ts +21 -0
  48. package/dist/providers/jev.d.ts.map +1 -0
  49. package/dist/providers/jev.js +175 -0
  50. package/dist/providers/jev.js.map +1 -0
  51. package/dist/questions.d.ts +98 -0
  52. package/dist/questions.d.ts.map +1 -0
  53. package/dist/questions.js +57 -0
  54. package/dist/questions.js.map +1 -0
  55. package/dist/runner.d.ts +52 -0
  56. package/dist/runner.d.ts.map +1 -0
  57. package/dist/runner.js +208 -0
  58. package/dist/runner.js.map +1 -0
  59. package/dist/schema.d.ts +49 -0
  60. package/dist/schema.d.ts.map +1 -0
  61. package/dist/schema.js +30 -0
  62. package/dist/schema.js.map +1 -0
  63. package/dist/testing.d.ts +34 -0
  64. package/dist/testing.d.ts.map +1 -0
  65. package/dist/testing.js +68 -0
  66. package/dist/testing.js.map +1 -0
  67. package/dist/types.d.ts +152 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/types.js +8 -0
  70. package/dist/types.js.map +1 -0
  71. package/package.json +29 -0
@@ -0,0 +1,206 @@
1
+ import { BUILTIN_DEFAULTS, globalRuntime } from "./config.js";
2
+ import { emit as emitEvent, runPlan as runPlanRaw } from "./runner.js";
3
+ import { parseTtlOrUndefined } from "./internal.js";
4
+ function render(item, index, label) {
5
+ if (label)
6
+ return label(item, index);
7
+ if (typeof item === "string")
8
+ return item;
9
+ return JSON.stringify(item);
10
+ }
11
+ async function mapLimited(items, limit, fn) {
12
+ const results = new Array(items.length);
13
+ let cursor = 0;
14
+ const workers = Array.from({ length: Math.min(limit, items.length) }, async () => {
15
+ while (cursor < items.length) {
16
+ const index = cursor++;
17
+ results[index] = await fn(items[index], index);
18
+ }
19
+ });
20
+ await Promise.all(workers);
21
+ return results;
22
+ }
23
+ /** Collection operations bound to one runtime: its provider, cache and defaults. */
24
+ export function bindCollections(runtime) {
25
+ const getConfig = () => runtime.config;
26
+ const resolveProvider = (override) => runtime.provider(override);
27
+ const emit = (event) => emitEvent(event, runtime.config);
28
+ const runPlan = (provider, state, planned, options = {}) => runPlanRaw(provider, state, planned, { ...options, store: runtime.store });
29
+ /**
30
+ * Scores every item independently against one proposition.
31
+ *
32
+ * This is N requests, not one: each item is a different state, and a request
33
+ * carries a single state. Prefer `find` when you only need the best item.
34
+ */
35
+ async function scoreEach(items, condition, options, operation) {
36
+ const provider = resolveProvider(options.provider);
37
+ const ttl = parseTtlOrUndefined(options.cache ?? getConfig().defaults?.cache);
38
+ const started = Date.now();
39
+ const scores = await mapLimited(items, options.concurrency ?? 8, async (item, index) => {
40
+ const rendered = render(item, index, options.label);
41
+ const shared = options.context;
42
+ const state = shared === undefined ? rendered : { context: shared, candidate: rendered };
43
+ const result = await runPlan(provider, state, [
44
+ {
45
+ key: "match",
46
+ question: {
47
+ kind: "truth",
48
+ instructions: condition,
49
+ ...(options.trueWhen !== undefined ? { trueWhen: options.trueWhen } : {}),
50
+ ...(options.falseWhen !== undefined ? { falseWhen: options.falseWhen } : {}),
51
+ },
52
+ samples: options.samples ?? 1,
53
+ ...(ttl !== undefined ? { cacheTtlMs: ttl } : {}),
54
+ },
55
+ ], options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {});
56
+ return result.answers["match"].probability;
57
+ });
58
+ emit({
59
+ operation,
60
+ keys: ["match"],
61
+ provider: provider.name,
62
+ model: provider.model,
63
+ latencyMs: Date.now() - started,
64
+ cached: false,
65
+ batched: false,
66
+ questionCount: items.length,
67
+ requestCount: items.length * (options.samples ?? 1),
68
+ samples: options.samples ?? 1,
69
+ });
70
+ return scores;
71
+ }
72
+ async function filter(items, condition, options = {}) {
73
+ if (items.length === 0)
74
+ return [];
75
+ const scores = await scoreEach(items, condition, { ...options, by: condition }, "filter");
76
+ const threshold = options.threshold ?? getConfig().defaults?.threshold ?? BUILTIN_DEFAULTS.threshold;
77
+ return items.filter((_, index) => scores[index] > threshold);
78
+ }
79
+ async function some(items, condition, options = {}) {
80
+ return (await filter(items, condition, options)).length > 0;
81
+ }
82
+ async function every(items, condition, options = {}) {
83
+ if (items.length === 0)
84
+ return true;
85
+ return (await filter(items, condition, options)).length === items.length;
86
+ }
87
+ async function rank(items, options) {
88
+ if (items.length === 0)
89
+ return [];
90
+ const scores = await scoreEach(items, options.by, options, "rank");
91
+ return items
92
+ .map((item, index) => ({ item, score: scores[index] }))
93
+ .sort((a, b) => b.score - a.score);
94
+ }
95
+ /**
96
+ * Picks the single best item in **one** request.
97
+ *
98
+ * Items become options of a Choice, and a companion truth question asks whether
99
+ * any of them actually fits. That second question is not optional: choice
100
+ * probabilities always sum to 1, so something always wins — including when
101
+ * nothing is suitable.
102
+ */
103
+ async function find(items, condition, options = {}) {
104
+ if (items.length === 0)
105
+ return undefined;
106
+ const provider = resolveProvider(options.provider);
107
+ const capacity = provider.capabilities.maxChoiceOptions;
108
+ if (items.length > capacity) {
109
+ const ranked = await rank(items, { ...options, by: condition });
110
+ const best = ranked[0];
111
+ const threshold = options.threshold ?? getConfig().defaults?.threshold ?? BUILTIN_DEFAULTS.threshold;
112
+ return best && best.score > threshold ? best.item : undefined;
113
+ }
114
+ const ids = items.map((_, index) => `i${index}`);
115
+ const optionMap = {};
116
+ const candidates = {};
117
+ items.forEach((item, index) => {
118
+ const text = render(item, index, options.label);
119
+ optionMap[ids[index]] = text;
120
+ candidates[ids[index]] = text;
121
+ });
122
+ const ttl = parseTtlOrUndefined(options.cache ?? getConfig().defaults?.cache);
123
+ const started = Date.now();
124
+ const result = await runPlan(provider, { candidates }, [
125
+ {
126
+ key: "pick",
127
+ question: { kind: "choice", instructions: condition, options: optionMap },
128
+ samples: options.samples ?? 1,
129
+ ...(ttl !== undefined ? { cacheTtlMs: ttl } : {}),
130
+ },
131
+ {
132
+ key: "exists",
133
+ question: {
134
+ kind: "truth",
135
+ instructions: `At least one of the candidates satisfies: ${condition}`,
136
+ falseWhen: "Every candidate is unrelated or only superficially similar.",
137
+ },
138
+ samples: options.samples ?? 1,
139
+ ...(ttl !== undefined ? { cacheTtlMs: ttl } : {}),
140
+ },
141
+ ], options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {});
142
+ emit({
143
+ operation: "find",
144
+ keys: ["pick", "exists"],
145
+ provider: provider.name,
146
+ model: provider.model,
147
+ latencyMs: Date.now() - started,
148
+ cached: result.cachedKeys.size === 2,
149
+ batched: true,
150
+ questionCount: 2,
151
+ requestCount: result.requestCount,
152
+ samples: options.samples ?? 1,
153
+ usage: result.usage,
154
+ });
155
+ const threshold = options.threshold ?? getConfig().defaults?.threshold ?? BUILTIN_DEFAULTS.threshold;
156
+ if (result.answers["exists"].probability <= threshold)
157
+ return undefined;
158
+ const picked = result.answers["pick"].choice;
159
+ const index = ids.indexOf(picked);
160
+ return index >= 0 ? items[index] : undefined;
161
+ }
162
+ /** Compares two values on one criterion in a single request. */
163
+ async function compare(left, right, options) {
164
+ const provider = resolveProvider(options.provider);
165
+ const toText = (item) => (options.label ? options.label(item) : typeof item === "string" ? item : JSON.stringify(item));
166
+ const started = Date.now();
167
+ const result = await runPlan(provider, { left: toText(left), right: toText(right) }, [
168
+ {
169
+ key: "winner",
170
+ question: {
171
+ kind: "choice",
172
+ instructions: `Which of "left" and "right" is better on this criterion: ${options.by}`,
173
+ options: {
174
+ left: "The value under `left` is better on the criterion.",
175
+ right: "The value under `right` is better on the criterion.",
176
+ equal: "Neither is meaningfully better on the criterion.",
177
+ },
178
+ },
179
+ samples: options.samples ?? 1,
180
+ },
181
+ ], options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {});
182
+ emit({
183
+ operation: "compare",
184
+ keys: ["winner"],
185
+ provider: provider.name,
186
+ model: provider.model,
187
+ latencyMs: Date.now() - started,
188
+ cached: false,
189
+ batched: false,
190
+ questionCount: 1,
191
+ requestCount: result.requestCount,
192
+ samples: options.samples ?? 1,
193
+ usage: result.usage,
194
+ });
195
+ return result.answers["winner"].choice;
196
+ }
197
+ return { filter, some, every, rank, find, compare };
198
+ }
199
+ const global = bindCollections(globalRuntime);
200
+ export const filter = (items, condition, options) => global.filter(items, condition, options);
201
+ export const some = (items, condition, options) => global.some(items, condition, options);
202
+ export const every = (items, condition, options) => global.every(items, condition, options);
203
+ export const rank = (items, options) => global.rank(items, options);
204
+ export const find = (items, condition, options) => global.find(items, condition, options);
205
+ export const compare = (left, right, options) => global.compare(left, right, options);
206
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { type SemanticCache } from "./cache.ts";
2
+ import type { Observability, SemanticProvider } from "./types.ts";
3
+ export interface SemanticDefaults {
4
+ timeoutMs?: number;
5
+ minConfidence?: number;
6
+ cache?: string | number;
7
+ /**
8
+ * Rounds used to measure confidence for truth-backed answers. Providers are
9
+ * not deterministic, so this is a measured spread rather than a derived one.
10
+ */
11
+ samples?: number;
12
+ /** Threshold `is()` uses to turn a probability into a boolean. */
13
+ threshold?: number;
14
+ /** Probabilities inside this band are reported as "unknown" when allowed. */
15
+ uncertaintyBand?: readonly [number, number];
16
+ /** Turns a noun-phrase criterion into a proposition. Replace for other languages. */
17
+ scoreFrame?: (criterion: string) => string;
18
+ }
19
+ export interface SemanticConfig {
20
+ provider?: SemanticProvider;
21
+ defaults?: SemanticDefaults;
22
+ observability?: Observability;
23
+ cacheStore?: SemanticCache;
24
+ /** Warn when calls that could have shared a request did not. Defaults to NODE_ENV !== "production". */
25
+ warnUnbatched?: boolean;
26
+ }
27
+ export declare const BUILTIN_DEFAULTS: {
28
+ timeoutMs: number;
29
+ samples: number;
30
+ threshold: number;
31
+ /** Matches the band the provider's own guidance recommends for escalation. */
32
+ uncertaintyBand: readonly [0.3, 0.7];
33
+ };
34
+ /**
35
+ * Everything a call needs that is not in its own options: the configuration,
36
+ * the cache it reads and writes, and the provider it talks to.
37
+ *
38
+ * There is one global runtime behind `semantic` and `configureSemantic`, and
39
+ * `createSemantic()` makes private ones. The two never share state.
40
+ */
41
+ export interface Runtime {
42
+ readonly config: SemanticConfig;
43
+ readonly store: SemanticCache;
44
+ provider(override?: SemanticProvider): SemanticProvider;
45
+ /** Merge more configuration in, the way `configureSemantic` does for the global runtime. */
46
+ configure(config: SemanticConfig): void;
47
+ }
48
+ export declare function createRuntime(config?: SemanticConfig): Runtime;
49
+ /** The runtime behind the module-level `semantic`. Reads the live config on every access. */
50
+ export declare const globalRuntime: Runtime;
51
+ export declare function configureSemantic(config: SemanticConfig): void;
52
+ export declare function resetSemantic(): void;
53
+ export declare function getConfig(): SemanticConfig;
54
+ export declare function getCacheStore(): SemanticCache;
55
+ export declare function resolveProvider(override?: SemanticProvider): SemanticProvider;
56
+ export declare function shouldWarnUnbatched(config?: SemanticConfig): boolean;
57
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,qFAAqF;IACrF,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,UAAU,CAAC,EAAE,aAAa,CAAA;IAC1B,uGAAuG;IACvG,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,eAAO,MAAM,gBAAgB;;;;IAI3B,8EAA8E;;CAEpD,CAAA;AAE5B;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAAA;IACvD,4FAA4F;IAC5F,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAA;CACxC;AAaD,wBAAgB,aAAa,CAAC,MAAM,GAAE,cAAmB,GAAG,OAAO,CAgBlE;AAKD,6FAA6F;AAC7F,eAAO,MAAM,aAAa,EAAE,OAS3B,CAAA;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAG9D;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC;AAED,wBAAgB,SAAS,IAAI,cAAc,CAE1C;AAED,wBAAgB,aAAa,IAAI,aAAa,CAE7C;AAED,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAE7E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,cAAwB,GAAG,OAAO,CAE7E"}
package/dist/config.js ADDED
@@ -0,0 +1,75 @@
1
+ import { MemoryCache } from "./cache.js";
2
+ import { NotConfiguredError } from "./errors.js";
3
+ import { jev } from "./providers/jev.js";
4
+ export const BUILTIN_DEFAULTS = {
5
+ timeoutMs: 10_000,
6
+ samples: 3,
7
+ threshold: 0.5,
8
+ /** Matches the band the provider's own guidance recommends for escalation. */
9
+ uncertaintyBand: [0.3, 0.7],
10
+ };
11
+ function resolveProviderIn(config, override) {
12
+ if (override)
13
+ return override;
14
+ if (config.provider)
15
+ return config.provider;
16
+ // Zero-config path: an API key in the environment is enough to start.
17
+ if (process.env["JEV_API_KEY"]) {
18
+ config.provider = jev();
19
+ return config.provider;
20
+ }
21
+ throw new NotConfiguredError();
22
+ }
23
+ export function createRuntime(config = {}) {
24
+ let own = { ...config, defaults: { ...config.defaults } };
25
+ let store = config.cacheStore ?? new MemoryCache();
26
+ return {
27
+ get config() {
28
+ return own;
29
+ },
30
+ get store() {
31
+ return store;
32
+ },
33
+ provider: (override) => resolveProviderIn(own, override),
34
+ configure(next) {
35
+ own = { ...own, ...next, defaults: { ...own.defaults, ...next.defaults } };
36
+ if (next.cacheStore)
37
+ store = next.cacheStore;
38
+ },
39
+ };
40
+ }
41
+ let current = {};
42
+ let store = new MemoryCache();
43
+ /** The runtime behind the module-level `semantic`. Reads the live config on every access. */
44
+ export const globalRuntime = {
45
+ get config() {
46
+ return current;
47
+ },
48
+ get store() {
49
+ return store;
50
+ },
51
+ provider: (override) => resolveProviderIn(current, override),
52
+ configure: (config) => configureSemantic(config),
53
+ };
54
+ export function configureSemantic(config) {
55
+ current = { ...current, ...config, defaults: { ...current.defaults, ...config.defaults } };
56
+ if (config.cacheStore)
57
+ store = config.cacheStore;
58
+ }
59
+ export function resetSemantic() {
60
+ current = {};
61
+ store = new MemoryCache();
62
+ }
63
+ export function getConfig() {
64
+ return current;
65
+ }
66
+ export function getCacheStore() {
67
+ return store;
68
+ }
69
+ export function resolveProvider(override) {
70
+ return globalRuntime.provider(override);
71
+ }
72
+ export function shouldWarnUnbatched(config = current) {
73
+ return config.warnUnbatched ?? process.env["NODE_ENV"] !== "production";
74
+ }
75
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { type Runtime } from "./config.ts";
2
+ import { type Ranked, type RankOptions } from "./collections.ts";
3
+ import { type ChooseOptions, type IsOptions, type QuestionSpec, type ScoreOptions } from "./questions.ts";
4
+ import type { ChoiceOptionSpec, State } from "./types.ts";
5
+ export interface DetailedTruth {
6
+ value: boolean;
7
+ /** The calibrated signal. For truth-backed answers this *is* the uncertainty. */
8
+ probability: number;
9
+ /** Measured across sample rounds. Undefined unless `samples`/`minConfidence` was set. */
10
+ confidence?: number;
11
+ }
12
+ export interface DetailedScore {
13
+ value: number;
14
+ probability?: number;
15
+ /** Rubric position, 1-indexed. Present only for `levels`-backed scores. */
16
+ level?: number;
17
+ confidence?: number;
18
+ }
19
+ export interface DetailedChoice<T extends string> {
20
+ value: T;
21
+ confidence: number;
22
+ probabilities: Record<string, number>;
23
+ }
24
+ export declare class SemanticContext {
25
+ #private;
26
+ constructor(state: State, runtime?: Runtime);
27
+ is(condition: string, options?: IsOptions & {
28
+ detailed?: false;
29
+ allowUnknown?: false;
30
+ }): Promise<boolean>;
31
+ is(condition: string, options: IsOptions & {
32
+ detailed: true;
33
+ }): Promise<DetailedTruth>;
34
+ is(condition: string, options: IsOptions & {
35
+ allowUnknown: true;
36
+ }): Promise<boolean | "unknown">;
37
+ score(criterion: string, options?: ScoreOptions & {
38
+ detailed?: false;
39
+ }): Promise<number>;
40
+ score(criterion: string, options: ScoreOptions & {
41
+ detailed: true;
42
+ }): Promise<DetailedScore>;
43
+ choose<const T extends readonly string[]>(options: T, extra?: ChooseOptions & {
44
+ detailed?: false;
45
+ }): Promise<T[number]>;
46
+ choose<const T extends readonly string[]>(options: T, extra: ChooseOptions & {
47
+ detailed: true;
48
+ }): Promise<DetailedChoice<T[number]>>;
49
+ choose<const T extends Readonly<Record<string, string | ChoiceOptionSpec>>>(options: T, extra?: ChooseOptions & {
50
+ detailed?: false;
51
+ }): Promise<keyof T & string>;
52
+ choose<const T extends Readonly<Record<string, string | ChoiceOptionSpec>>>(options: T, extra: ChooseOptions & {
53
+ detailed: true;
54
+ }): Promise<DetailedChoice<keyof T & string>>;
55
+ /**
56
+ * Orders items by how well they fit this state.
57
+ *
58
+ * Each candidate is judged against the state in its own request, so this
59
+ * costs one call per item. When you only need the winner, `semantic.find`
60
+ * answers in a single call instead.
61
+ */
62
+ rank<T>(items: readonly T[], options: Omit<RankOptions, "context">): Promise<Ranked<T>[]>;
63
+ /**
64
+ * Evaluates every question against this state in a single request.
65
+ *
66
+ * Equivalent to creating the same questions in one turn and awaiting them
67
+ * together; this form just makes the intent explicit and names the results.
68
+ */
69
+ batch<S extends Record<string, QuestionSpec>>(spec: S): Promise<{
70
+ [K in keyof S]: S[K] extends QuestionSpec<infer V> ? V : never;
71
+ }>;
72
+ }
73
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}