@odla-ai/kg 0.3.0 → 0.4.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.
- package/dist/chunk-T6SYIVST.js +376 -0
- package/dist/chunk-T6SYIVST.js.map +1 -0
- package/dist/index.cjs +410 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +330 -5
- package/dist/index.d.ts +330 -5
- package/dist/index.js +249 -38
- package/dist/index.js.map +1 -1
- package/dist/lenses-C7Q7Gvnx.d.cts +123 -0
- package/dist/lenses-C7Q7Gvnx.d.ts +123 -0
- package/dist/temporal/index.cjs +134 -617
- package/dist/temporal/index.cjs.map +1 -1
- package/dist/temporal/index.d.cts +23 -447
- package/dist/temporal/index.d.ts +23 -447
- package/dist/temporal/index.js +28 -780
- package/dist/temporal/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-V3N2GRYU.js +0 -73
- package/dist/chunk-V3N2GRYU.js.map +0 -1
- package/dist/sources-nJyD0JUP.d.cts +0 -256
- package/dist/sources-nJyD0JUP.d.ts +0 -256
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,71 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
3
|
-
import { AdminDb, Value, Entity } from '@odla-ai/db';
|
|
4
|
-
import '@odla-ai/ai';
|
|
1
|
+
import { G as GraphFragment, W as WeightedPair, U as Usage, R as RawItem, E as ExtractResult } from './lenses-C7Q7Gvnx.cjs';
|
|
2
|
+
export { a as GraphEdge, b as GraphNode, c as addUsage, e as emptyUsage } from './lenses-C7Q7Gvnx.cjs';
|
|
3
|
+
import { Op, AdminDb, SerializedAttr, Cardinality, SerializedSchema, Value, Entity } from '@odla-ai/db';
|
|
4
|
+
import { ExtractTool, Ai } from '@odla-ai/ai';
|
|
5
|
+
|
|
6
|
+
/** node type → unique natural-key attribute name. */
|
|
7
|
+
type NaturalKeys = Record<string, string>;
|
|
8
|
+
/**
|
|
9
|
+
* Pure fragment → ops mapping (no read/merge). Node upserts by Lookup natural
|
|
10
|
+
* key, then links — nodes always before links so `link` targets resolve.
|
|
11
|
+
* Used by tests and as the building block for the provenance path below.
|
|
12
|
+
*/
|
|
13
|
+
declare function fragmentToOps(fragment: GraphFragment, keys: NaturalKeys): Op[];
|
|
14
|
+
/**
|
|
15
|
+
* Provenance-preserving write. Reads existing nodes by natural key (one batched
|
|
16
|
+
* query), merges scalar attrs per the ontology's rules, drops human-owned
|
|
17
|
+
* attrs, then writes merged node updates + all links in one atomic, idempotent
|
|
18
|
+
* transaction. `mutationId` must be deterministic so odla-db can deduplicate
|
|
19
|
+
* the write on retry; this does not make preceding reads or external effects
|
|
20
|
+
* exactly-once.
|
|
21
|
+
*/
|
|
22
|
+
declare function writeFragment(db: AdminDb, fragment: GraphFragment, ontology: Ontology, mutationId: string): Promise<{
|
|
23
|
+
txId: number;
|
|
24
|
+
ops: number;
|
|
25
|
+
}>;
|
|
26
|
+
|
|
27
|
+
/** How a scalar attribute is reconciled when a node is re-discovered. */
|
|
28
|
+
type MergeRule = "replace" | "prefer" | "earliest" | "latest";
|
|
29
|
+
type AttrType = SerializedAttr["type"];
|
|
30
|
+
interface AttrSpec {
|
|
31
|
+
type: AttrType;
|
|
32
|
+
unique?: boolean;
|
|
33
|
+
indexed?: boolean;
|
|
34
|
+
optional?: boolean;
|
|
35
|
+
/** The pipeline NEVER writes this attr (hand-edited in a UI); omitted from every update. */
|
|
36
|
+
human?: boolean;
|
|
37
|
+
/** Provenance rule for re-discovery. Default "replace". */
|
|
38
|
+
merge?: MergeRule;
|
|
39
|
+
/** Shown to the LLM when this attr appears in an extraction schema. */
|
|
40
|
+
desc?: string;
|
|
41
|
+
}
|
|
42
|
+
interface EntitySpec {
|
|
43
|
+
/** Unique attr used for Lookup upsert (MERGE key). Must be `unique` in attrs. */
|
|
44
|
+
naturalKey: string;
|
|
45
|
+
attrs: Record<string, AttrSpec>;
|
|
46
|
+
/** FTS fields for fuzzy resolution (P5). */
|
|
47
|
+
searchable?: string[];
|
|
48
|
+
}
|
|
49
|
+
interface EdgeSpec {
|
|
50
|
+
from: string;
|
|
51
|
+
to: string;
|
|
52
|
+
forwardLabel: string;
|
|
53
|
+
reverseLabel: string;
|
|
54
|
+
forwardHas?: Cardinality;
|
|
55
|
+
reverseHas?: Cardinality;
|
|
56
|
+
}
|
|
57
|
+
interface Ontology {
|
|
58
|
+
entities: Record<string, EntitySpec>;
|
|
59
|
+
edges: Record<string, EdgeSpec>;
|
|
60
|
+
}
|
|
61
|
+
/** node type → natural-key attr name (for the graph writer's Lookup refs). */
|
|
62
|
+
declare function naturalKeysOf(o: Ontology): NaturalKeys;
|
|
63
|
+
/** Attr name → merge rule, for every entity type (used by the provenance writer). */
|
|
64
|
+
declare function mergeRulesOf(o: Ontology): Record<string, Record<string, MergeRule>>;
|
|
65
|
+
/** Attr names the pipeline must never write, per entity type. */
|
|
66
|
+
declare function humanAttrsOf(o: Ontology): Record<string, Set<string>>;
|
|
67
|
+
/** Compile the ontology to an odla-db SerializedSchema to POST at /app/:id/schema. */
|
|
68
|
+
declare function toSerializedSchema(o: Ontology): SerializedSchema;
|
|
5
69
|
|
|
6
70
|
/** One entity type to export. */
|
|
7
71
|
interface ExportEntitySpec {
|
|
@@ -71,6 +135,210 @@ declare function resolveName(db: AdminDb, type: string, keyAttr: string, name: s
|
|
|
71
135
|
*/
|
|
72
136
|
declare function canonicalizeFragment(db: AdminDb, fragment: GraphFragment, ontology: Ontology): Promise<GraphFragment>;
|
|
73
137
|
|
|
138
|
+
/** One relatedness lens over the universe nodes. */
|
|
139
|
+
interface ConnectorLens {
|
|
140
|
+
/** Reified relationship node type carrying both edges (e.g. `"affiliation"`). */
|
|
141
|
+
reified: string;
|
|
142
|
+
/** Edge label to the SHARED entity that bridges (e.g. `"of_person"`). */
|
|
143
|
+
bridge: string;
|
|
144
|
+
/** Edge label to the UNIVERSE node the shared entity connects (e.g. `"of_company"`). */
|
|
145
|
+
of: string;
|
|
146
|
+
/** Blend weight (each lens is normalized to max 1 first). Default 1. */
|
|
147
|
+
weight?: number;
|
|
148
|
+
}
|
|
149
|
+
/** How to find connectors: the lenses to blend, plus limits. */
|
|
150
|
+
interface ConnectorConfig {
|
|
151
|
+
lenses: ConnectorLens[];
|
|
152
|
+
/** Extra precomputed pairs to fold in (e.g. geo/time affinity). */
|
|
153
|
+
extraPairs?: Array<{
|
|
154
|
+
pairs: WeightedPair[];
|
|
155
|
+
weight: number;
|
|
156
|
+
}>;
|
|
157
|
+
/** How many connectors to return. Default 12. */
|
|
158
|
+
top?: number;
|
|
159
|
+
/** Skip promiscuous shared entities touching more than this many nodes. Default 12. */
|
|
160
|
+
maxPerBridge?: number;
|
|
161
|
+
}
|
|
162
|
+
/** One bridging node: the groups it joins and the shared entities that link it out. */
|
|
163
|
+
interface Connector {
|
|
164
|
+
/** `type:key` of the connector node. */
|
|
165
|
+
ref: string;
|
|
166
|
+
name: string;
|
|
167
|
+
/** 0..1 brokerage — 1 is the strongest connector found. */
|
|
168
|
+
score: number;
|
|
169
|
+
/** Representative names of the distinct groups it bridges. */
|
|
170
|
+
groups: string[];
|
|
171
|
+
/** Names of the shared entities (people/investors/…) linking it to other groups. */
|
|
172
|
+
via: string[];
|
|
173
|
+
}
|
|
174
|
+
/** The ranked connectors plus the size of the graph they were found in. */
|
|
175
|
+
interface ConnectorReport {
|
|
176
|
+
connectors: Connector[];
|
|
177
|
+
/** Distinct communities in the blended graph. */
|
|
178
|
+
communities: number;
|
|
179
|
+
/** Universe nodes with at least one relationship. */
|
|
180
|
+
nodes: number;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Rank the connectors of a graph. Builds the blended relationship graph from
|
|
184
|
+
* the lenses, detects communities, scores each node's cross-community
|
|
185
|
+
* brokerage, and returns the top bridges with the groups they join and the
|
|
186
|
+
* shared entities behind each link. Empty/relationshipless input → empty report.
|
|
187
|
+
*/
|
|
188
|
+
declare function findConnectors(fragment: GraphFragment, config: ConnectorConfig): ConnectorReport;
|
|
189
|
+
|
|
190
|
+
/** The minimal company row enrichment reads (attrs only — never hydrates). */
|
|
191
|
+
interface CompanyRow {
|
|
192
|
+
slug: string;
|
|
193
|
+
name: string;
|
|
194
|
+
city?: string;
|
|
195
|
+
region?: string;
|
|
196
|
+
first_seen?: string;
|
|
197
|
+
founded?: string;
|
|
198
|
+
fips?: string;
|
|
199
|
+
}
|
|
200
|
+
/** System prompt for the county-resolution extraction. */
|
|
201
|
+
declare const LOCATE_SYSTEM = "You resolve US business locations to counties. For each company you are given a city and/or a free-text region. Name the US county containing that city (for independent cities, use the city's own county-equivalent name) plus its 2-letter state. Use nulls when the location is ambiguous, outside the US, or unknown.";
|
|
202
|
+
/** Forced-tool schema pairing each company slug with a county name + state. */
|
|
203
|
+
declare const LOCATE_TOOL: ExtractTool;
|
|
204
|
+
/** The user prompt for a LOCATE batch. */
|
|
205
|
+
declare function locatePrompt(batch: CompanyRow[]): string;
|
|
206
|
+
/** System prompt for the grounded web-search research pass. */
|
|
207
|
+
declare const FACTS_SEARCH_SYSTEM = "You are a research assistant with web search. Find concrete facts about the company: founding year/date, headquarters city and state, founders and key executives (names, roles), and funding (rounds, dates, amounts, investor names). Prefer official/reputable sources. Report dense factual notes; say 'not found' for anything you cannot establish. Do not speculate.";
|
|
208
|
+
/** System prompt for structuring the research notes into {@link FactsDraft}. */
|
|
209
|
+
declare const FACTS_EXTRACT_SYSTEM = "Extract structured facts from the research notes. Use null for anything the notes do not establish.";
|
|
210
|
+
/** Forced-tool schema for the structured company facts (founding, HQ, people, funding). */
|
|
211
|
+
declare const FACTS_EXTRACT_TOOL: ExtractTool;
|
|
212
|
+
/** The model's structured company facts, before validation into a fragment. */
|
|
213
|
+
interface FactsDraft {
|
|
214
|
+
founded?: string | null;
|
|
215
|
+
city?: string | null;
|
|
216
|
+
state?: string | null;
|
|
217
|
+
people: Array<{
|
|
218
|
+
name: string;
|
|
219
|
+
role: string;
|
|
220
|
+
}>;
|
|
221
|
+
rounds: Array<{
|
|
222
|
+
round?: string | null;
|
|
223
|
+
date?: string | null;
|
|
224
|
+
amount?: string | null;
|
|
225
|
+
investors: string[];
|
|
226
|
+
}>;
|
|
227
|
+
}
|
|
228
|
+
/** Loose county-name key for joining model output ("Santa Clara","CA") to a gazetteer. */
|
|
229
|
+
declare const countyKey: (name: string, st: string) => string;
|
|
230
|
+
/**
|
|
231
|
+
* Turn one company's structured facts into an idempotent fragment: founded/
|
|
232
|
+
* city attrs, person + dated affiliation nodes, funding_round nodes (keyed
|
|
233
|
+
* `slug~e<i>` so they never collide with seed rounds), and investors. Capped
|
|
234
|
+
* and validated — the draft is a proposal, not a command.
|
|
235
|
+
*/
|
|
236
|
+
declare function factsToFragment(company: CompanyRow, draft: FactsDraft): GraphFragment;
|
|
237
|
+
/** The `located_in` write linking a company to its resolved county. */
|
|
238
|
+
declare function locationFragment(slug: string, name: string, fips: string): GraphFragment;
|
|
239
|
+
|
|
240
|
+
/** Which model serves each verb (search must be a web-grounded model). */
|
|
241
|
+
interface EnrichModels {
|
|
242
|
+
/** Web-search-grounded research model. */
|
|
243
|
+
search: string;
|
|
244
|
+
/** Structured-extraction (forced tool-call) model. */
|
|
245
|
+
extract: string;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Enrich one company: a grounded web search for its facts, then a structured
|
|
249
|
+
* extraction into a validated {@link factsToFragment}. Retries the extraction
|
|
250
|
+
* once (reasoning models sometimes skip a forced tool call). Returns the
|
|
251
|
+
* fragment (possibly empty — nothing established); the caller writes it.
|
|
252
|
+
*/
|
|
253
|
+
declare function enrichCompany(ai: Ai, models: EnrichModels, company: CompanyRow): Promise<GraphFragment>;
|
|
254
|
+
/**
|
|
255
|
+
* Resolve a batch of companies' free-text locations to county FIPS codes via a
|
|
256
|
+
* single structured extraction, joined against a caller-supplied gazetteer
|
|
257
|
+
* (`countyKey(name, state)` → FIPS). Only confident, gazetteer-matched
|
|
258
|
+
* resolutions are returned.
|
|
259
|
+
*/
|
|
260
|
+
declare function resolveCounties(ai: Ai, model: string, rows: CompanyRow[], gazetteer: Map<string, string>): Promise<Array<{
|
|
261
|
+
slug: string;
|
|
262
|
+
fips: string;
|
|
263
|
+
}>>;
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* The LLM seam, now a thin adapter over @odla-ai/ai (which was itself
|
|
267
|
+
* generalized from this package's original Provider). Three verbs stay:
|
|
268
|
+
* extract (forced structured tool call), search (web-search-enabled text),
|
|
269
|
+
* write (plain generation). Callers never see vendor or oracle types.
|
|
270
|
+
*/
|
|
271
|
+
type ProviderFamily = "claude" | "openai";
|
|
272
|
+
/** Role → model tiers per family — config as data. `cheap` is for gate-style
|
|
273
|
+
* calls, `extract` for structured extraction (and prose writing), `search`
|
|
274
|
+
* for web-search-enabled calls. */
|
|
275
|
+
declare const MODEL_TIERS: Record<ProviderFamily, {
|
|
276
|
+
cheap: string;
|
|
277
|
+
extract: string;
|
|
278
|
+
search: string;
|
|
279
|
+
}>;
|
|
280
|
+
/** A forced structured tool call: schema in, validated object out. */
|
|
281
|
+
interface ExtractCall {
|
|
282
|
+
system: string;
|
|
283
|
+
user: string;
|
|
284
|
+
tool: {
|
|
285
|
+
name: string;
|
|
286
|
+
description?: string;
|
|
287
|
+
parameters: Record<string, unknown>;
|
|
288
|
+
};
|
|
289
|
+
model?: string;
|
|
290
|
+
maxTokens?: number;
|
|
291
|
+
}
|
|
292
|
+
/** A web-search-enabled call: the model searches and returns text (caller tolerant-parses). */
|
|
293
|
+
interface SearchCall {
|
|
294
|
+
system: string;
|
|
295
|
+
user: string;
|
|
296
|
+
model?: string;
|
|
297
|
+
maxTokens?: number;
|
|
298
|
+
}
|
|
299
|
+
/** A plain text-generation call (no tools, no search) — e.g. digest prose. */
|
|
300
|
+
interface WriteCall {
|
|
301
|
+
system: string;
|
|
302
|
+
user: string;
|
|
303
|
+
model?: string;
|
|
304
|
+
maxTokens?: number;
|
|
305
|
+
}
|
|
306
|
+
interface Provider {
|
|
307
|
+
id: ProviderFamily;
|
|
308
|
+
/** The underlying @odla-ai/ai client — escape hatch for advanced use. */
|
|
309
|
+
ai: Ai;
|
|
310
|
+
extract<T = unknown>(c: ExtractCall): Promise<{
|
|
311
|
+
value: T;
|
|
312
|
+
usage: Usage;
|
|
313
|
+
}>;
|
|
314
|
+
search(c: SearchCall): Promise<{
|
|
315
|
+
text: string;
|
|
316
|
+
usage: Usage;
|
|
317
|
+
}>;
|
|
318
|
+
write(c: WriteCall): Promise<{
|
|
319
|
+
text: string;
|
|
320
|
+
usage: Usage;
|
|
321
|
+
}>;
|
|
322
|
+
}
|
|
323
|
+
interface LlmConfig {
|
|
324
|
+
provider: ProviderFamily;
|
|
325
|
+
anthropicKey?: string;
|
|
326
|
+
openaiKey?: string;
|
|
327
|
+
/** Inject a pre-built Ai (tests, custom catalog); keys are ignored when set. */
|
|
328
|
+
ai?: Ai;
|
|
329
|
+
}
|
|
330
|
+
/** The library primitive: an explicit config in, the three-verb seam out. */
|
|
331
|
+
declare function createProvider(cfg: LlmConfig): Provider;
|
|
332
|
+
/** The env vars the provider factory reads — a structural slice, not the
|
|
333
|
+
* worker Env, so any host (worker, script, test) can supply plain strings. */
|
|
334
|
+
interface LlmEnv {
|
|
335
|
+
LLM_PROVIDER?: string;
|
|
336
|
+
ANTHROPIC_API_KEY?: string;
|
|
337
|
+
OPENAI_API_KEY?: string;
|
|
338
|
+
}
|
|
339
|
+
/** Build the configured provider from host env, failing before use when its key is missing. */
|
|
340
|
+
declare function getProvider(env: LlmEnv): Provider;
|
|
341
|
+
|
|
74
342
|
/**
|
|
75
343
|
* Tolerant JSON extraction from LLM prose — web-search models return JSON inside
|
|
76
344
|
* explanatory text. Ported from agnacl services/enrichment.ts.
|
|
@@ -79,6 +347,41 @@ declare function extractJson<T = unknown>(text: string): T | null;
|
|
|
79
347
|
/** Tolerantly parse the first JSON-array-shaped span in model prose, or return an empty array. */
|
|
80
348
|
declare function extractJsonArray<T = unknown>(text: string): T[];
|
|
81
349
|
|
|
350
|
+
/** Ambient services a connector may use. Host-agnostic: secrets come through
|
|
351
|
+
* secret(), never a worker Env, so the library runs anywhere. */
|
|
352
|
+
interface ConnectorContext {
|
|
353
|
+
now: Date;
|
|
354
|
+
fetchText(url: string): Promise<string>;
|
|
355
|
+
secret(name: string): string | undefined;
|
|
356
|
+
ontology: Ontology;
|
|
357
|
+
/** The configured LLM provider (lazy — only web-search/discovery connectors need it). */
|
|
358
|
+
provider(): Provider;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* The extensibility seam. A connector emits normalized RawItems — text-bearing
|
|
362
|
+
* (→ LLM extraction) or fragment-bearing (structured → straight to the writer).
|
|
363
|
+
* Adding a source = a new module implementing this + one registry line.
|
|
364
|
+
*/
|
|
365
|
+
interface SourceConnector<Cfg = unknown> {
|
|
366
|
+
id: string;
|
|
367
|
+
capabilities: {
|
|
368
|
+
fetch: boolean;
|
|
369
|
+
discover?: boolean;
|
|
370
|
+
structured: boolean;
|
|
371
|
+
};
|
|
372
|
+
parseConfig(raw: unknown): Cfg;
|
|
373
|
+
fetch(cfg: Cfg, ctx: ConnectorContext): Promise<RawItem[]>;
|
|
374
|
+
/** Web-search-style net-new discovery (P4). */
|
|
375
|
+
discover?(cfg: Cfg, ctx: ConnectorContext): Promise<RawItem[]>;
|
|
376
|
+
}
|
|
377
|
+
/** One unit of work for the ingest workflow: which connector + its config. */
|
|
378
|
+
interface ConnectorJob {
|
|
379
|
+
kind: string;
|
|
380
|
+
name: string;
|
|
381
|
+
watch?: string | null;
|
|
382
|
+
cfg: unknown;
|
|
383
|
+
}
|
|
384
|
+
|
|
82
385
|
/** Resolve a built-in source connector by its stable registry id. */
|
|
83
386
|
declare function getConnector(id: string): SourceConnector | undefined;
|
|
84
387
|
/** List registered connector ids in deterministic insertion order. */
|
|
@@ -97,6 +400,28 @@ declare function makeContext(cfg: ContextConfig): ConnectorContext;
|
|
|
97
400
|
/** Fetch one URL → a text-bearing RawItem. Used both directly (/trigger) and as a connector. */
|
|
98
401
|
declare function fetchUrl(url: string): Promise<RawItem>;
|
|
99
402
|
|
|
403
|
+
/**
|
|
404
|
+
* Sources are DATA, not code. Each entry names a connector (`kind`) + its config
|
|
405
|
+
* + scheduling. Add a feed → add an entry; no redeploy of the pipeline. P5 moves
|
|
406
|
+
* this into KV behind a /config admin endpoint so edits don't need a deploy at all.
|
|
407
|
+
*/
|
|
408
|
+
interface SourceEntry {
|
|
409
|
+
kind: string;
|
|
410
|
+
name: string;
|
|
411
|
+
enabled?: boolean;
|
|
412
|
+
cadenceHours?: number;
|
|
413
|
+
watch?: string | null;
|
|
414
|
+
url?: string;
|
|
415
|
+
query?: string;
|
|
416
|
+
[key: string]: unknown;
|
|
417
|
+
}
|
|
418
|
+
/** Return source entries not explicitly disabled, preserving configured order. */
|
|
419
|
+
declare function enabledSources(sources: SourceEntry[]): SourceEntry[];
|
|
420
|
+
/** Enabled sources whose cadence lands on this UTC hour. */
|
|
421
|
+
declare function jobsForHour(sources: SourceEntry[], hour: number): ConnectorJob[];
|
|
422
|
+
/** Every enabled source, ignoring cadence (manual /trigger?kind=sources). */
|
|
423
|
+
declare function allJobs(sources: SourceEntry[]): ConnectorJob[];
|
|
424
|
+
|
|
100
425
|
/**
|
|
101
426
|
* The slice of a KV store the pipeline needs. Cloudflare's KVNamespace
|
|
102
427
|
* satisfies it structurally; tests pass an in-memory map. Keeping the library
|
|
@@ -236,4 +561,4 @@ declare function htmlToText(html: string, maxChars?: number): string;
|
|
|
236
561
|
/** Fetch a URL and return readable text. Best-effort: returns "" on any failure. */
|
|
237
562
|
declare function fetchText(url: string, maxChars?: number): Promise<string>;
|
|
238
563
|
|
|
239
|
-
export { COMMIT_STEP_CONFIG, ConnectorContext, type ContextConfig, type ExportEntitySpec, type ExportSpec, ExtractResult, GraphFragment, IO_STEP_CONFIG, type KVLike, LLM_STEP_CONFIG, MergeRule, Ontology, type PipelineDeps, Provider, RawItem, SourceConnector, SourceEntry, type StepConfig, type StepLike, Store, asStepLike, canonicalizeFragment, connectorIds, exportFragment, extractJson, extractJsonArray, fetchText, fetchUrl, getConnector, htmlToText, ingestFresh, isLikelyPersonName, makeContext, mergeAttrs, mergeScalar, normalizeUrl, resilientStep, resolveName, searchEntities, slugify, urlHash };
|
|
564
|
+
export { type AttrSpec, type AttrType, COMMIT_STEP_CONFIG, type CompanyRow, type Connector, type ConnectorConfig, type ConnectorContext, type ConnectorJob, type ConnectorLens, type ConnectorReport, type ContextConfig, type EdgeSpec, type EnrichModels, type EntitySpec, type ExportEntitySpec, type ExportSpec, type ExtractCall, ExtractResult, FACTS_EXTRACT_SYSTEM, FACTS_EXTRACT_TOOL, FACTS_SEARCH_SYSTEM, type FactsDraft, GraphFragment, IO_STEP_CONFIG, type KVLike, LLM_STEP_CONFIG, LOCATE_SYSTEM, LOCATE_TOOL, type LlmConfig, type LlmEnv, MODEL_TIERS, type MergeRule, type NaturalKeys, type Ontology, type PipelineDeps, type Provider, type ProviderFamily, RawItem, type SearchCall, type SourceConnector, type SourceEntry, type StepConfig, type StepLike, Store, Usage, type WriteCall, allJobs, asStepLike, canonicalizeFragment, connectorIds, countyKey, createProvider, enabledSources, enrichCompany, exportFragment, extractJson, extractJsonArray, factsToFragment, fetchText, fetchUrl, findConnectors, fragmentToOps, getConnector, getProvider, htmlToText, humanAttrsOf, ingestFresh, isLikelyPersonName, jobsForHour, locatePrompt, locationFragment, makeContext, mergeAttrs, mergeRulesOf, mergeScalar, naturalKeysOf, normalizeUrl, resilientStep, resolveCounties, resolveName, searchEntities, slugify, toSerializedSchema, urlHash, writeFragment };
|