@proposit/proposit-core 5.1.0 → 5.2.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/cli/builder-repl.js +1 -1
- package/dist/cli/builder-repl.js.map +1 -1
- package/dist/extensions/openai/openai-retrieval.d.ts.map +1 -1
- package/dist/extensions/openai/openai-retrieval.js +4 -2
- package/dist/extensions/openai/openai-retrieval.js.map +1 -1
- package/dist/extensions/openai/openai-tools.d.ts +8 -1
- package/dist/extensions/openai/openai-tools.d.ts.map +1 -1
- package/dist/extensions/openai/openai-tools.js +10 -0
- package/dist/extensions/openai/openai-tools.js.map +1 -1
- package/dist/extensions/openai/provider.d.ts.map +1 -1
- package/dist/extensions/openai/provider.js +5 -3
- package/dist/extensions/openai/provider.js.map +1 -1
- package/dist/extensions/openai/types.d.ts +2 -1
- package/dist/extensions/openai/types.d.ts.map +1 -1
- package/dist/extensions/openai/types.js.map +1 -1
- package/dist/extensions/pipelines/base/finalize-response-v2.d.ts +9 -6
- package/dist/extensions/pipelines/base/finalize-response-v2.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/finalize-response-v2.js +101 -20
- package/dist/extensions/pipelines/base/finalize-response-v2.js.map +1 -1
- package/dist/extensions/pipelines/base/index.d.ts +1 -1
- package/dist/extensions/pipelines/base/index.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/index.js.map +1 -1
- package/dist/extensions/pipelines/base/source-anchors.d.ts +33 -2
- package/dist/extensions/pipelines/base/source-anchors.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/source-anchors.js +191 -13
- package/dist/extensions/pipelines/base/source-anchors.js.map +1 -1
- package/dist/extensions/pipelines/base/stages/axiom-indicator-detection.d.ts +1 -1
- package/dist/extensions/pipelines/base/stages/axiom-indicator-detection.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/stages/axiom-indicator-detection.js +1 -1
- package/dist/extensions/pipelines/base/stages/axiom-indicator-detection.js.map +1 -1
- package/dist/extensions/pipelines/base/stages/citation-source-detection.d.ts +1 -1
- package/dist/extensions/pipelines/base/stages/citation-source-detection.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/stages/citation-source-detection.js +1 -1
- package/dist/extensions/pipelines/base/stages/citation-source-detection.js.map +1 -1
- package/dist/extensions/pipelines/base/stages/claim-canonicalization.d.ts +3 -2
- package/dist/extensions/pipelines/base/stages/claim-canonicalization.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/stages/claim-canonicalization.js +2 -2
- package/dist/extensions/pipelines/base/stages/claim-canonicalization.js.map +1 -1
- package/dist/extensions/pipelines/base/stages/claim-mention-extraction.d.ts +1 -1
- package/dist/extensions/pipelines/base/stages/claim-mention-extraction.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/stages/claim-mention-extraction.js +1 -1
- package/dist/extensions/pipelines/base/stages/claim-mention-extraction.js.map +1 -1
- package/dist/extensions/pipelines/base/stages/claim-type-classification.d.ts +1 -1
- package/dist/extensions/pipelines/base/stages/claim-type-classification.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/stages/claim-type-classification.js +1 -1
- package/dist/extensions/pipelines/base/stages/claim-type-classification.js.map +1 -1
- package/dist/extensions/pipelines/base/stages/conclusion-selection.d.ts +26 -3
- package/dist/extensions/pipelines/base/stages/conclusion-selection.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/stages/conclusion-selection.js +40 -2
- package/dist/extensions/pipelines/base/stages/conclusion-selection.js.map +1 -1
- package/dist/extensions/pipelines/base/stages/index.d.ts +1 -1
- package/dist/extensions/pipelines/base/stages/index.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/stages/index.js +1 -1
- package/dist/extensions/pipelines/base/stages/index.js.map +1 -1
- package/dist/extensions/pipelines/base/stages/relation-extraction.d.ts +4 -3
- package/dist/extensions/pipelines/base/stages/relation-extraction.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/stages/relation-extraction.js +6 -4
- package/dist/extensions/pipelines/base/stages/relation-extraction.js.map +1 -1
- package/dist/extensions/pipelines/base/stages/segmentation.d.ts +1 -1
- package/dist/extensions/pipelines/base/stages/segmentation.d.ts.map +1 -1
- package/dist/extensions/pipelines/base/stages/segmentation.js +1 -1
- package/dist/extensions/pipelines/base/stages/segmentation.js.map +1 -1
- package/dist/extensions/pipelines/base/types.d.ts +1 -1
- package/dist/extensions/pipelines/ingestion/scribe/extract-stage.d.ts +61 -10
- package/dist/extensions/pipelines/ingestion/scribe/extract-stage.d.ts.map +1 -1
- package/dist/extensions/pipelines/ingestion/scribe/extract-stage.js +203 -14
- package/dist/extensions/pipelines/ingestion/scribe/extract-stage.js.map +1 -1
- package/dist/extensions/pipelines/ingestion/scribe/schemas.d.ts +15 -2
- package/dist/extensions/pipelines/ingestion/scribe/schemas.d.ts.map +1 -1
- package/dist/extensions/pipelines/ingestion/scribe/schemas.js +14 -2
- package/dist/extensions/pipelines/ingestion/scribe/schemas.js.map +1 -1
- package/dist/extensions/pipelines/ingestion/scribe/scribe.js +2 -2
- package/dist/extensions/pipelines/ingestion/scribe/scribe.js.map +1 -1
- package/dist/extensions/pipelines/ingestion/scribe/source-attachment.d.ts +29 -0
- package/dist/extensions/pipelines/ingestion/scribe/source-attachment.d.ts.map +1 -0
- package/dist/extensions/pipelines/ingestion/scribe/source-attachment.js +200 -0
- package/dist/extensions/pipelines/ingestion/scribe/source-attachment.js.map +1 -0
- package/dist/extensions/pipelines/ingestion/scribe/structure-stage.d.ts +5 -3
- package/dist/extensions/pipelines/ingestion/scribe/structure-stage.d.ts.map +1 -1
- package/dist/extensions/pipelines/ingestion/scribe/structure-stage.js +42 -14
- package/dist/extensions/pipelines/ingestion/scribe/structure-stage.js.map +1 -1
- package/dist/lib/core/parser/formula-gen.js +309 -46
- package/dist/lib/llm/types.d.ts +8 -2
- package/dist/lib/llm/types.d.ts.map +1 -1
- package/dist/lib/llm/types.js.map +1 -1
- package/dist/lib/pipelines/debug-log.js +1 -1
- package/dist/lib/pipelines/debug-log.js.map +1 -1
- package/dist/lib/pipelines/index.d.ts +1 -1
- package/dist/lib/pipelines/index.d.ts.map +1 -1
- package/dist/lib/pipelines/index.js.map +1 -1
- package/dist/lib/pipelines/llm-stage-helpers.d.ts +22 -1
- package/dist/lib/pipelines/llm-stage-helpers.d.ts.map +1 -1
- package/dist/lib/pipelines/llm-stage-helpers.js +21 -9
- package/dist/lib/pipelines/llm-stage-helpers.js.map +1 -1
- package/dist/lib/pipelines/single-stage.d.ts +9 -1
- package/dist/lib/pipelines/single-stage.d.ts.map +1 -1
- package/dist/lib/pipelines/single-stage.js +14 -3
- package/dist/lib/pipelines/single-stage.js.map +1 -1
- package/dist/lib/pipelines/stage-helpers.d.ts +1 -1
- package/dist/lib/pipelines/stage-helpers.d.ts.map +1 -1
- package/dist/lib/pipelines/stage-helpers.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// Attaching scribe's source claims — citations and axioms — to the claims
|
|
2
|
+
// they support.
|
|
3
|
+
//
|
|
4
|
+
// A source becomes derivation backing only as the antecedent of an
|
|
5
|
+
// inference relation (`sortInferenceRelations`). `structure` is the only
|
|
6
|
+
// stage that emits relations, and it is shown the claim list, never the
|
|
7
|
+
// text, so it cannot tell which claim a link or an appeal to a principle
|
|
8
|
+
// sits beside — and it may leave a source out altogether. A source
|
|
9
|
+
// attached to nothing backs nothing and is lost downstream.
|
|
10
|
+
//
|
|
11
|
+
// So each source gets extra single-antecedent relations `[source] →
|
|
12
|
+
// supported`: first to every normal claim `extract` named for it (the
|
|
13
|
+
// one stage that reads the text); failing that, when `structure` did not
|
|
14
|
+
// use it either, to a claim chosen by where the mentions sit — the
|
|
15
|
+
// normal claim whose mention overlaps the source's most, else the nearest
|
|
16
|
+
// normal claim in the same sentence, else the nearest normal claim whose
|
|
17
|
+
// mention ends before the source's begins. A relation
|
|
18
|
+
// with only a source antecedent compiles to backing and no freeform
|
|
19
|
+
// premise, so nothing else about the argument changes.
|
|
20
|
+
//
|
|
21
|
+
// An axiom is never attached to a claim a citation backs: grammar rule D-3
|
|
22
|
+
// forbids one derivation mixing the two. Citations are attached first and
|
|
23
|
+
// the axiom is dropped with a warning.
|
|
24
|
+
import { locateSourceAnchor } from "../../base/source-anchors.js";
|
|
25
|
+
import { sortInferenceRelations } from "../../base/stages/formula-compilation.js";
|
|
26
|
+
export const SOURCE_ATTACHMENT_FAILURE_CODES = {
|
|
27
|
+
invalidSource: "SOURCE_ATTACHMENT_INVALID_SOURCE",
|
|
28
|
+
invalidTarget: "SOURCE_ATTACHMENT_INVALID_TARGET",
|
|
29
|
+
mixed: "SOURCE_ATTACHMENT_MIXED",
|
|
30
|
+
unattached: "SOURCE_ATTACHMENT_UNATTACHED",
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Where a mention sits in the input: its quote located in the text when
|
|
34
|
+
* it can be, else the offsets the model reported.
|
|
35
|
+
*/
|
|
36
|
+
function mentionRange(mention, inputText) {
|
|
37
|
+
const match = locateSourceAnchor(inputText, mention.text, mention.span.start);
|
|
38
|
+
return match === undefined
|
|
39
|
+
? mention.span
|
|
40
|
+
: { start: match.anchor.startUtf16, end: match.anchor.endUtf16 };
|
|
41
|
+
}
|
|
42
|
+
function overlapLength(a, b) {
|
|
43
|
+
return Math.max(0, Math.min(a.end, b.end) - Math.max(a.start, b.start));
|
|
44
|
+
}
|
|
45
|
+
// A sentence ends at a terminator followed by whitespace (closing quotes and
|
|
46
|
+
// brackets allowed in between), or at a line break. The dots inside a URL
|
|
47
|
+
// are followed by more of the URL, so they never count.
|
|
48
|
+
const SENTENCE_BREAK = /[.!?]["')\]]*\s|\n/;
|
|
49
|
+
/**
|
|
50
|
+
* The normal claim a source's mentions belong to, if any: the one whose
|
|
51
|
+
* mention overlaps a source mention most; else the nearest one in the same
|
|
52
|
+
* sentence, on either side ("According to <link>, <claim>."); else the
|
|
53
|
+
* nearest one that ends before the source begins.
|
|
54
|
+
*/
|
|
55
|
+
function claimByPosition(sourceRanges, normalRanges, inputText) {
|
|
56
|
+
let overlapping;
|
|
57
|
+
let sameSentence;
|
|
58
|
+
let preceding;
|
|
59
|
+
for (const claim of normalRanges) {
|
|
60
|
+
for (const range of claim.ranges) {
|
|
61
|
+
for (const source of sourceRanges) {
|
|
62
|
+
const overlap = overlapLength(range, source);
|
|
63
|
+
if (overlap > 0) {
|
|
64
|
+
if (overlapping === undefined ||
|
|
65
|
+
overlap > overlapping.overlap)
|
|
66
|
+
overlapping = { miniId: claim.miniId, overlap };
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const [gapStart, gapEnd] = range.end <= source.start
|
|
70
|
+
? [range.end, source.start]
|
|
71
|
+
: [source.end, range.start];
|
|
72
|
+
const gap = gapEnd - gapStart;
|
|
73
|
+
// From the earlier mention's last character, which is where
|
|
74
|
+
// a sentence it closes has its terminator.
|
|
75
|
+
const between = inputText.slice(Math.max(0, gapStart - 1), gapEnd);
|
|
76
|
+
if (!SENTENCE_BREAK.test(between) &&
|
|
77
|
+
(sameSentence === undefined || gap < sameSentence.gap))
|
|
78
|
+
sameSentence = { miniId: claim.miniId, gap };
|
|
79
|
+
if (range.end <= source.start &&
|
|
80
|
+
(preceding === undefined || range.end > preceding.end))
|
|
81
|
+
preceding = { miniId: claim.miniId, end: range.end };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return (overlapping ?? sameSentence ?? preceding)?.miniId;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The relations that attach each citation and axiomatic claim to what it
|
|
89
|
+
* supports, to be published alongside `structure`'s own. See the file
|
|
90
|
+
* comment for the order in which a target is chosen.
|
|
91
|
+
*/
|
|
92
|
+
export function buildSourceRelations(args) {
|
|
93
|
+
const claims = args.extract?.canonicalClaims ?? [];
|
|
94
|
+
const mentionById = new Map((args.extract?.mentions ?? []).map((m) => [m.mentionId, m]));
|
|
95
|
+
const rangesOf = (mentionIds) => mentionIds.flatMap((id) => {
|
|
96
|
+
const mention = mentionById.get(id);
|
|
97
|
+
return mention === undefined
|
|
98
|
+
? []
|
|
99
|
+
: [mentionRange(mention, args.inputText)];
|
|
100
|
+
});
|
|
101
|
+
const normalRanges = claims
|
|
102
|
+
.filter((c) => args.typeByMiniId.get(c.miniId) === "normal")
|
|
103
|
+
.map((c) => ({ miniId: c.miniId, ranges: rangesOf(c.mentionIds) }));
|
|
104
|
+
// Read off what the compiler will make of structure's relations, so a
|
|
105
|
+
// relation it drops (an unknown claim id, say) attaches nothing here
|
|
106
|
+
// either. Its warnings are the compiler's to report, not this stage's.
|
|
107
|
+
const structureBacking = sortInferenceRelations({
|
|
108
|
+
relations: [...args.structureRelations],
|
|
109
|
+
typeByClaimMiniId: args.typeByMiniId,
|
|
110
|
+
}).derivationBacking;
|
|
111
|
+
const attachedByStructure = new Set([...structureBacking.values()].flat());
|
|
112
|
+
// Claims a citation backs. An axiom may not join them: one derivation
|
|
113
|
+
// mixing axioms and citations breaks grammar rule D-3.
|
|
114
|
+
const backedByCitation = new Set([...structureBacking]
|
|
115
|
+
.filter(([, supporters]) => supporters.some((id) => args.typeByMiniId.get(id) === "citation"))
|
|
116
|
+
.map(([consequent]) => consequent));
|
|
117
|
+
const relations = [];
|
|
118
|
+
const attach = (sourceMiniId, sourceType, supportedMiniId) => {
|
|
119
|
+
if (sourceType === "axiomatic" &&
|
|
120
|
+
backedByCitation.has(supportedMiniId)) {
|
|
121
|
+
args.addFailure({
|
|
122
|
+
code: SOURCE_ATTACHMENT_FAILURE_CODES.mixed,
|
|
123
|
+
message: `Axiom "${sourceMiniId}" supports "${supportedMiniId}", which a citation already backs; one claim cannot be backed by both, so the axiom was not attached.`,
|
|
124
|
+
severity: "warning",
|
|
125
|
+
context: { sourceMiniId, supportedMiniId },
|
|
126
|
+
});
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (sourceType === "citation")
|
|
130
|
+
backedByCitation.add(supportedMiniId);
|
|
131
|
+
relations.push({
|
|
132
|
+
relationId: `source-${sourceMiniId}-${supportedMiniId}`,
|
|
133
|
+
type: "inference",
|
|
134
|
+
antecedents: [sourceMiniId],
|
|
135
|
+
consequent: supportedMiniId,
|
|
136
|
+
title: "",
|
|
137
|
+
evidence: { segmentIds: [], quote: "" },
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
for (const entry of args.extract?.sourceSupport ?? []) {
|
|
141
|
+
const sourceType = args.typeByMiniId.get(entry.sourceMiniId);
|
|
142
|
+
if (sourceType === "citation" || sourceType === "axiomatic")
|
|
143
|
+
continue;
|
|
144
|
+
args.addFailure({
|
|
145
|
+
code: SOURCE_ATTACHMENT_FAILURE_CODES.invalidSource,
|
|
146
|
+
message: `"${entry.sourceMiniId}" was paired as a source for "${entry.supportedMiniId}", but it is ${sourceType === undefined ? "not a known claim" : `a ${sourceType} claim`}; only a citation or axiomatic claim is a source. Ignoring the pairing.`,
|
|
147
|
+
severity: "warning",
|
|
148
|
+
context: {
|
|
149
|
+
sourceMiniId: entry.sourceMiniId,
|
|
150
|
+
supportedMiniId: entry.supportedMiniId,
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
// Citations first, so an axiom sees every claim a citation backs.
|
|
155
|
+
for (const sourceType of ["citation", "axiomatic"]) {
|
|
156
|
+
const label = sourceType === "citation" ? "Source" : "Axiom";
|
|
157
|
+
for (const claim of claims) {
|
|
158
|
+
if (args.typeByMiniId.get(claim.miniId) !== sourceType)
|
|
159
|
+
continue;
|
|
160
|
+
const sourceMiniId = claim.miniId;
|
|
161
|
+
const named = new Set();
|
|
162
|
+
for (const entry of args.extract?.sourceSupport ?? []) {
|
|
163
|
+
if (entry.sourceMiniId !== sourceMiniId)
|
|
164
|
+
continue;
|
|
165
|
+
const targetType = args.typeByMiniId.get(entry.supportedMiniId);
|
|
166
|
+
if (targetType !== "normal") {
|
|
167
|
+
args.addFailure({
|
|
168
|
+
code: SOURCE_ATTACHMENT_FAILURE_CODES.invalidTarget,
|
|
169
|
+
message: `${label} "${sourceMiniId}" was said to support "${entry.supportedMiniId}", which is ${targetType === undefined ? "not a known claim" : `a ${targetType} claim`}; a ${label.toLowerCase()} can only support a normal claim.`,
|
|
170
|
+
severity: "warning",
|
|
171
|
+
context: {
|
|
172
|
+
sourceMiniId,
|
|
173
|
+
supportedMiniId: entry.supportedMiniId,
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
named.add(entry.supportedMiniId);
|
|
179
|
+
}
|
|
180
|
+
for (const supportedMiniId of named) {
|
|
181
|
+
attach(sourceMiniId, sourceType, supportedMiniId);
|
|
182
|
+
}
|
|
183
|
+
if (named.size > 0 || attachedByStructure.has(sourceMiniId))
|
|
184
|
+
continue;
|
|
185
|
+
const supportedMiniId = claimByPosition(rangesOf(claim.mentionIds), normalRanges, args.inputText);
|
|
186
|
+
if (supportedMiniId === undefined) {
|
|
187
|
+
args.addFailure({
|
|
188
|
+
code: SOURCE_ATTACHMENT_FAILURE_CODES.unattached,
|
|
189
|
+
message: `${label} "${sourceMiniId}" supports no claim: none was named for it, and no normal claim is stated where it appears or before it.`,
|
|
190
|
+
severity: "warning",
|
|
191
|
+
context: { sourceMiniId },
|
|
192
|
+
});
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
attach(sourceMiniId, sourceType, supportedMiniId);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return relations;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=source-attachment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-attachment.js","sourceRoot":"","sources":["../../../../../src/extensions/pipelines/ingestion/scribe/source-attachment.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,10 @@ import type { TStage } from "../../../../lib/pipelines/types.js";
|
|
|
2
2
|
import { type TConclusionSelectionOutput, type TRelationExtractionOutput } from "../../base/stages/index.js";
|
|
3
3
|
import type { TLlmStageOptionsOverride } from "../../base/types.js";
|
|
4
4
|
import { type TScribeStructureOutput } from "./schemas.js";
|
|
5
|
-
export declare const STRUCTURE_MODEL = "gpt-
|
|
5
|
+
export declare const STRUCTURE_MODEL = "gpt-6-sol";
|
|
6
6
|
/** Internal default knobs for scribe's `structure` stage. */
|
|
7
7
|
export declare const STRUCTURE_STAGE_DEFAULTS: TLlmStageOptionsOverride;
|
|
8
|
-
export declare const STRUCTURE_SYSTEM_PROMPT = "You read a canonical claim set \u2014 each claim's id, type, and content fields (title/body) \u2014 and emit the argument's structure.\n\nEmit:\n- `relations` \u2014 the inference edges between claims. Each relation: a stable `relationId` (r1, r2, ...), a `type` of \"inference\", an `antecedents` array of the claim miniIds whose conjunction implies the consequent (one or more; citation- or axiomatic-typed claims may appear here, but never as the consequent), a single `consequent` claim miniId, a `title`, and an `evidence` object, which is always exactly { segmentIds: [], quote: \"\" } \u2014 you are shown the claims, not the text they came from, so you have nothing to quote.\n- each relation's `title` \u2014 a short noun phrase naming what that step DOES in the argument \u2014 the inferential move, not the proposition. Do not restate the consequent: that claim's own title is already shown directly beneath this one. Aim for under 60 characters. Examples: \"Limits of the crowd's power\", \"Residence as tacit consent\", \"Principle over survival\".\n- `conclusionCandidates` \u2014 the claim miniIds that could be the argument's conclusion, ordered by DECREASING confidence (best first). The conclusion is the claim other claims support but that supports nothing further. Never list a citation- or axiomatic-typed claim
|
|
8
|
+
export declare const STRUCTURE_SYSTEM_PROMPT = "You read a canonical claim set \u2014 each claim's id, type, and content fields (title/body) \u2014 and emit the argument's structure.\n\nEmit:\n- `relations` \u2014 the inference edges between claims. Each relation: a stable `relationId` (r1, r2, ...), a `type` of \"inference\", an `antecedents` array of the claim miniIds whose conjunction implies the consequent (one or more; citation- or axiomatic-typed claims may appear here, but never as the consequent), a single `consequent` claim miniId, a `title`, and an `evidence` object, which is always exactly { segmentIds: [], quote: \"\" } \u2014 you are shown the claims, not the text they came from, so you have nothing to quote.\n- each relation's `title` \u2014 a short noun phrase naming what that step DOES in the argument \u2014 the inferential move, not the proposition. Do not restate the consequent: that claim's own title is already shown directly beneath this one. Aim for under 60 characters. Examples: \"Limits of the crowd's power\", \"Residence as tacit consent\", \"Principle over survival\". Every relation's title must differ from every other relation's \u2014 two steps never share a name.\n- `conclusionCandidates` \u2014 the claim miniIds that could be the argument's conclusion, ordered by DECREASING confidence (best first). The conclusion is the claim other claims support but that supports nothing further. Never list a citation- or axiomatic-typed claim.\n- `conclusionTitle` \u2014 for your FIRST candidate only: a short noun phrase naming what the concluding step DOES in the argument \u2014 the inferential move, not the proposition. Do not restate the consequent: that claim's own title is already shown directly beneath this one. Aim for under 60 characters. It must differ from every relation's `title` \u2014 the step that reaches the conclusion already has its own. Return an empty string when `conclusionCandidates` is empty.\n- `rationale` \u2014 one sentence explaining your best pick (or why none qualifies).\n\nEmit the relations and conclusion the author actually argues. An argument with at least two normal-typed claims has at least one relation and one conclusion candidate, so look for them before concluding there are none. Never invent support the author does not give: if the claims genuinely do not connect, return `relations` and `conclusionCandidates` empty.\n\nOutput ONLY the schema-shaped object. No prose.";
|
|
9
9
|
/**
|
|
10
10
|
* Build scribe's `structure` LLM stage. Depends on the canonicalization
|
|
11
11
|
* + classification slots (populated by `extract`'s adapters) so the
|
|
@@ -15,7 +15,9 @@ export declare const STRUCTURE_SYSTEM_PROMPT = "You read a canonical claim set \
|
|
|
15
15
|
export declare function createStructureStage(options?: TLlmStageOptionsOverride): TStage<TScribeStructureOutput>;
|
|
16
16
|
/**
|
|
17
17
|
* Adapter — republish `structure`'s relations under the
|
|
18
|
-
* relation-extraction slot
|
|
18
|
+
* relation-extraction slot, together with the relations that attach each
|
|
19
|
+
* source claim to the claim it supports (`buildSourceRelations`), read
|
|
20
|
+
* off the same settled citations the canonicalization slot carries.
|
|
19
21
|
*/
|
|
20
22
|
export declare const structureRelationAdapterStage: TStage<TRelationExtractionOutput>;
|
|
21
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure-stage.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/pipelines/ingestion/scribe/structure-stage.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,oCAAoC,CAAA;AAC/E,OAAO,
|
|
1
|
+
{"version":3,"file":"structure-stage.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/pipelines/ingestion/scribe/structure-stage.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,oCAAoC,CAAA;AAC/E,OAAO,EASH,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EACjC,MAAM,4BAA4B,CAAA;AAEnC,OAAO,KAAK,EAER,wBAAwB,EAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAGH,KAAK,sBAAsB,EAC9B,MAAM,cAAc,CAAA;AAIrB,eAAO,MAAM,eAAe,cAAc,CAAA;AAE1C,6DAA6D;AAC7D,eAAO,MAAM,wBAAwB,EAAE,wBAEtC,CAAA;AAED,eAAO,MAAM,uBAAuB,i3EAWY,CAAA;AAwChD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,OAAO,CAAC,EAAE,wBAAwB,GACnC,MAAM,CAAC,sBAAsB,CAAC,CAehC;AAED;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,yBAAyB,CAoCtE,CAAA;AAEN;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC,0BAA0B,CA4DzE,CAAA"}
|
|
@@ -13,9 +13,12 @@
|
|
|
13
13
|
// read, not the raw model candidates.
|
|
14
14
|
import { llmStage } from "../../../../lib/pipelines/stage-helpers.js";
|
|
15
15
|
import { deterministicStage } from "../../../../lib/pipelines/stage-helpers.js";
|
|
16
|
-
import { STAGE_IDS, RelationExtractionOutputSchema, ConclusionSelectionOutputSchema, selectFallbackConclusion, CONCLUSION_SELECTION_NO_CONCLUSION_FAILURE_CODE, } from "../../base/stages/index.js";
|
|
16
|
+
import { STAGE_IDS, RelationExtractionOutputSchema, ConclusionSelectionOutputSchema, checkArgumentStructure, selectFallbackConclusion, CONCLUSION_SELECTION_NO_CONCLUSION_FAILURE_CODE, } from "../../base/stages/index.js";
|
|
17
|
+
import { resolveClaimTypes } from "../../base/stages/formula-compilation.js";
|
|
17
18
|
import { ScribeStructureOutputSchema, } from "./schemas.js";
|
|
18
|
-
|
|
19
|
+
import { buildSourceRelations } from "./source-attachment.js";
|
|
20
|
+
import { settleCitations } from "./extract-stage.js";
|
|
21
|
+
export const STRUCTURE_MODEL = "gpt-6-sol";
|
|
19
22
|
/** Internal default knobs for scribe's `structure` stage. */
|
|
20
23
|
export const STRUCTURE_STAGE_DEFAULTS = {
|
|
21
24
|
model: STRUCTURE_MODEL,
|
|
@@ -24,11 +27,13 @@ export const STRUCTURE_SYSTEM_PROMPT = `You read a canonical claim set — each
|
|
|
24
27
|
|
|
25
28
|
Emit:
|
|
26
29
|
- \`relations\` — the inference edges between claims. Each relation: a stable \`relationId\` (r1, r2, ...), a \`type\` of "inference", an \`antecedents\` array of the claim miniIds whose conjunction implies the consequent (one or more; citation- or axiomatic-typed claims may appear here, but never as the consequent), a single \`consequent\` claim miniId, a \`title\`, and an \`evidence\` object, which is always exactly { segmentIds: [], quote: "" } — you are shown the claims, not the text they came from, so you have nothing to quote.
|
|
27
|
-
- each relation's \`title\` — a short noun phrase naming what that step DOES in the argument — the inferential move, not the proposition. Do not restate the consequent: that claim's own title is already shown directly beneath this one. Aim for under 60 characters. Examples: "Limits of the crowd's power", "Residence as tacit consent", "Principle over survival".
|
|
28
|
-
- \`conclusionCandidates\` — the claim miniIds that could be the argument's conclusion, ordered by DECREASING confidence (best first). The conclusion is the claim other claims support but that supports nothing further. Never list a citation- or axiomatic-typed claim.
|
|
29
|
-
- \`conclusionTitle\` — for your FIRST candidate only: a short noun phrase naming what the concluding step DOES in the argument — the inferential move, not the proposition. Do not restate the consequent: that claim's own title is already shown directly beneath this one. Aim for under 60 characters. Return an empty string when \`conclusionCandidates\` is empty.
|
|
30
|
+
- each relation's \`title\` — a short noun phrase naming what that step DOES in the argument — the inferential move, not the proposition. Do not restate the consequent: that claim's own title is already shown directly beneath this one. Aim for under 60 characters. Examples: "Limits of the crowd's power", "Residence as tacit consent", "Principle over survival". Every relation's title must differ from every other relation's — two steps never share a name.
|
|
31
|
+
- \`conclusionCandidates\` — the claim miniIds that could be the argument's conclusion, ordered by DECREASING confidence (best first). The conclusion is the claim other claims support but that supports nothing further. Never list a citation- or axiomatic-typed claim.
|
|
32
|
+
- \`conclusionTitle\` — for your FIRST candidate only: a short noun phrase naming what the concluding step DOES in the argument — the inferential move, not the proposition. Do not restate the consequent: that claim's own title is already shown directly beneath this one. Aim for under 60 characters. It must differ from every relation's \`title\` — the step that reaches the conclusion already has its own. Return an empty string when \`conclusionCandidates\` is empty.
|
|
30
33
|
- \`rationale\` — one sentence explaining your best pick (or why none qualifies).
|
|
31
34
|
|
|
35
|
+
Emit the relations and conclusion the author actually argues. An argument with at least two normal-typed claims has at least one relation and one conclusion candidate, so look for them before concluding there are none. Never invent support the author does not give: if the claims genuinely do not connect, return \`relations\` and \`conclusionCandidates\` empty.
|
|
36
|
+
|
|
32
37
|
Output ONLY the schema-shaped object. No prose.`;
|
|
33
38
|
function buildStructurePrompt(ctx) {
|
|
34
39
|
const canon = ctx.get(STAGE_IDS.claimCanonicalization);
|
|
@@ -77,20 +82,42 @@ export function createStructureStage(options) {
|
|
|
77
82
|
reasoningEffort: options?.reasoningEffort,
|
|
78
83
|
retry: options?.retry,
|
|
79
84
|
buildPrompt: buildStructurePrompt,
|
|
85
|
+
checkOutput: (output, ctx) => checkArgumentStructure(ctx, output),
|
|
80
86
|
});
|
|
81
87
|
}
|
|
82
88
|
/**
|
|
83
89
|
* Adapter — republish `structure`'s relations under the
|
|
84
|
-
* relation-extraction slot
|
|
90
|
+
* relation-extraction slot, together with the relations that attach each
|
|
91
|
+
* source claim to the claim it supports (`buildSourceRelations`), read
|
|
92
|
+
* off the same settled citations the canonicalization slot carries.
|
|
85
93
|
*/
|
|
86
94
|
export const structureRelationAdapterStage = deterministicStage({
|
|
87
95
|
id: STAGE_IDS.relationExtraction,
|
|
88
|
-
dependsOn: [
|
|
96
|
+
dependsOn: [
|
|
97
|
+
STAGE_IDS.scribeStructure,
|
|
98
|
+
STAGE_IDS.extract,
|
|
99
|
+
STAGE_IDS.claimTypeClassification,
|
|
100
|
+
],
|
|
89
101
|
outputSchema: RelationExtractionOutputSchema,
|
|
90
|
-
fn: (ctx) =>
|
|
91
|
-
|
|
92
|
-
?.relations ?? []
|
|
93
|
-
|
|
102
|
+
fn: (ctx) => {
|
|
103
|
+
const structureRelations = ctx.get(STAGE_IDS.scribeStructure)
|
|
104
|
+
?.relations ?? [];
|
|
105
|
+
// Settled again rather than read from the canonicalization slot:
|
|
106
|
+
// attachment needs the mentions and source pairings too, which
|
|
107
|
+
// that slot does not carry. The adapter there has reported.
|
|
108
|
+
const extract = settleCitations(ctx.get(STAGE_IDS.extract), ctx.input.text, () => undefined);
|
|
109
|
+
const sourceRelations = buildSourceRelations({
|
|
110
|
+
extract,
|
|
111
|
+
structureRelations,
|
|
112
|
+
typeByMiniId: resolveClaimTypes({
|
|
113
|
+
classifications: ctx.get(STAGE_IDS.claimTypeClassification)?.classifications ?? [],
|
|
114
|
+
canonicalClaims: extract?.canonicalClaims ?? [],
|
|
115
|
+
}),
|
|
116
|
+
inputText: ctx.input.text,
|
|
117
|
+
addFailure: ctx.addFailure,
|
|
118
|
+
});
|
|
119
|
+
return { relations: [...structureRelations, ...sourceRelations] };
|
|
120
|
+
},
|
|
94
121
|
});
|
|
95
122
|
/**
|
|
96
123
|
* Adapter — republish `structure`'s conclusion candidates under the
|
|
@@ -105,7 +132,6 @@ export const structureConclusionAdapterStage = deterministicStage({
|
|
|
105
132
|
dependsOn: [
|
|
106
133
|
STAGE_IDS.scribeStructure,
|
|
107
134
|
STAGE_IDS.claimTypeClassification,
|
|
108
|
-
STAGE_IDS.relationExtraction,
|
|
109
135
|
],
|
|
110
136
|
outputSchema: ConclusionSelectionOutputSchema,
|
|
111
137
|
fn: (ctx) => {
|
|
@@ -113,8 +139,10 @@ export const structureConclusionAdapterStage = deterministicStage({
|
|
|
113
139
|
const candidates = structure?.conclusionCandidates ?? [];
|
|
114
140
|
const rationale = structure?.rationale ?? "";
|
|
115
141
|
const classifications = ctx.get(STAGE_IDS.claimTypeClassification)?.classifications ?? [];
|
|
116
|
-
|
|
117
|
-
|
|
142
|
+
// `structure`'s own relations, not the published slot: the
|
|
143
|
+
// source relations added there would make each supported claim
|
|
144
|
+
// look like a candidate conclusion to the graph fallback.
|
|
145
|
+
const relations = structure?.relations ?? [];
|
|
118
146
|
const normalMiniIds = new Set(classifications
|
|
119
147
|
.filter((entry) => entry.type === "normal")
|
|
120
148
|
.map((entry) => entry.miniId));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure-stage.js","sourceRoot":"","sources":["../../../../../src/extensions/pipelines/ingestion/scribe/structure-stage.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,oEAAoE;AACpE,2DAA2D;AAC3D,iEAAiE;AACjE,sDAAsD;AACtD,gEAAgE;AAChE,EAAE;AACF,mEAAmE;AACnE,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,sEAAsE;AACtE,sCAAsC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAA;AAE/E,OAAO,EACH,SAAS,EACT,8BAA8B,EAC9B,+BAA+B,EAC/B,wBAAwB,EACxB,+CAA+C,GAKlD,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"structure-stage.js","sourceRoot":"","sources":["../../../../../src/extensions/pipelines/ingestion/scribe/structure-stage.ts"],"names":[],"mappings":"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"}
|