@proposit/proposit-core 1.5.0 → 1.6.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/extensions/argument-ingestion/shared/resolve-llm-stage-options.d.ts.map +1 -1
- package/dist/extensions/argument-ingestion/shared/resolve-llm-stage-options.js +6 -0
- package/dist/extensions/argument-ingestion/shared/resolve-llm-stage-options.js.map +1 -1
- package/dist/extensions/argument-ingestion/shared/types.d.ts +18 -7
- package/dist/extensions/argument-ingestion/shared/types.d.ts.map +1 -1
- package/dist/extensions/argument-ingestion/stages/axiom-indicator-detection.d.ts.map +1 -1
- package/dist/extensions/argument-ingestion/stages/axiom-indicator-detection.js +4 -2
- package/dist/extensions/argument-ingestion/stages/axiom-indicator-detection.js.map +1 -1
- package/dist/extensions/argument-ingestion/stages/citation-source-detection.d.ts.map +1 -1
- package/dist/extensions/argument-ingestion/stages/citation-source-detection.js +4 -2
- package/dist/extensions/argument-ingestion/stages/citation-source-detection.js.map +1 -1
- package/dist/extensions/argument-ingestion/stages/claim-canonicalization.d.ts +1 -1
- package/dist/extensions/argument-ingestion/stages/claim-canonicalization.d.ts.map +1 -1
- package/dist/extensions/argument-ingestion/stages/claim-canonicalization.js +5 -3
- package/dist/extensions/argument-ingestion/stages/claim-canonicalization.js.map +1 -1
- package/dist/extensions/argument-ingestion/stages/claim-mention-extraction.d.ts.map +1 -1
- package/dist/extensions/argument-ingestion/stages/claim-mention-extraction.js +4 -2
- package/dist/extensions/argument-ingestion/stages/claim-mention-extraction.js.map +1 -1
- package/dist/extensions/argument-ingestion/stages/claim-type-classification.d.ts.map +1 -1
- package/dist/extensions/argument-ingestion/stages/claim-type-classification.js +4 -2
- package/dist/extensions/argument-ingestion/stages/claim-type-classification.js.map +1 -1
- package/dist/extensions/argument-ingestion/stages/conclusion-selection.d.ts.map +1 -1
- package/dist/extensions/argument-ingestion/stages/conclusion-selection.js +2 -1
- package/dist/extensions/argument-ingestion/stages/conclusion-selection.js.map +1 -1
- package/dist/extensions/argument-ingestion/stages/relation-extraction.d.ts.map +1 -1
- package/dist/extensions/argument-ingestion/stages/relation-extraction.js +2 -1
- package/dist/extensions/argument-ingestion/stages/relation-extraction.js.map +1 -1
- package/dist/extensions/argument-ingestion/stages/segmentation.d.ts.map +1 -1
- package/dist/extensions/argument-ingestion/stages/segmentation.js +2 -1
- package/dist/extensions/argument-ingestion/stages/segmentation.js.map +1 -1
- package/dist/extensions/ollama/errors.d.ts +70 -0
- package/dist/extensions/ollama/errors.d.ts.map +1 -0
- package/dist/extensions/ollama/errors.js +210 -0
- package/dist/extensions/ollama/errors.js.map +1 -0
- package/dist/extensions/ollama/index.d.ts +6 -0
- package/dist/extensions/ollama/index.d.ts.map +1 -0
- package/dist/extensions/ollama/index.js +17 -0
- package/dist/extensions/ollama/index.js.map +1 -0
- package/dist/extensions/ollama/provider.d.ts +19 -0
- package/dist/extensions/ollama/provider.d.ts.map +1 -0
- package/dist/extensions/ollama/provider.js +285 -0
- package/dist/extensions/ollama/provider.js.map +1 -0
- package/dist/extensions/ollama/structured-output.d.ts +18 -0
- package/dist/extensions/ollama/structured-output.d.ts.map +1 -0
- package/dist/extensions/ollama/structured-output.js +164 -0
- package/dist/extensions/ollama/structured-output.js.map +1 -0
- package/dist/extensions/ollama/types.d.ts +101 -0
- package/dist/extensions/ollama/types.d.ts.map +1 -0
- package/dist/extensions/ollama/types.js +7 -0
- package/dist/extensions/ollama/types.js.map +1 -0
- package/dist/lib/parsing/prompt-builder.d.ts.map +1 -1
- package/dist/lib/parsing/prompt-builder.js +2 -0
- package/dist/lib/parsing/prompt-builder.js.map +1 -1
- package/package.json +11 -1
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
// TypeBox → standard JSON Schema converter for the Ollama provider.
|
|
2
|
+
//
|
|
3
|
+
// Ollama's `format` parameter accepts a *standard* JSON Schema (the
|
|
4
|
+
// same shape `zodToJsonSchema` would emit). This converter deliberately
|
|
5
|
+
// does NOT apply the OpenAI Responses-API strict-mode folds that
|
|
6
|
+
// `typeboxToOpenAiSchema` (`../openai/structured-output.ts`) applies:
|
|
7
|
+
//
|
|
8
|
+
// * No forced `additionalProperties: false` on objects.
|
|
9
|
+
// * `Type.Optional(T)` → the key is simply OMITTED from `required`
|
|
10
|
+
// (standard JSON-schema optionality), NOT widened to
|
|
11
|
+
// `{ anyOf: [T, { type: "null" }] }` and kept in `required`.
|
|
12
|
+
//
|
|
13
|
+
// Those strict folds are correct for OpenAI strict mode and harmful for
|
|
14
|
+
// a standard `format` consumer, so the Ollama provider gets its own
|
|
15
|
+
// converter rather than reusing/renaming the OpenAI one.
|
|
16
|
+
//
|
|
17
|
+
// Supported TypeBox subset (same primitives the OpenAI converter
|
|
18
|
+
// covers): Object, Array, String, Number, Integer, Boolean, Literal,
|
|
19
|
+
// Union (including Union-of-Literals → enum shorthand, and Union
|
|
20
|
+
// containing Null for the Nullable pattern), Optional (modifier),
|
|
21
|
+
// Record, Null. Unsupported primitives throw a clear
|
|
22
|
+
// `UnsupportedSchemaError` at conversion time.
|
|
23
|
+
//
|
|
24
|
+
// The converter ignores TypeBox `$id` / `description` / other metadata
|
|
25
|
+
// on inner types — only structural fields are projected.
|
|
26
|
+
class UnsupportedSchemaError extends Error {
|
|
27
|
+
constructor(kind) {
|
|
28
|
+
super(`TypeBox primitive "${kind}" is not supported by the Ollama structured-output converter. ` +
|
|
29
|
+
`Supported subset: Object, Array, String, Number, Integer, Boolean, Literal, Union, Optional, Record, Null.`);
|
|
30
|
+
this.name = "UnsupportedSchemaError";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function kindOf(schema) {
|
|
34
|
+
return schema["~kind"];
|
|
35
|
+
}
|
|
36
|
+
function isOptional(schema) {
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
38
|
+
return schema["~optional"] === true;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Convert a TypeBox schema into a standard JSON Schema document
|
|
42
|
+
* suitable for Ollama's `format` parameter.
|
|
43
|
+
*
|
|
44
|
+
* Throws `UnsupportedSchemaError` when the source schema contains a
|
|
45
|
+
* TypeBox primitive outside the supported subset.
|
|
46
|
+
*/
|
|
47
|
+
export function typeboxToJsonSchema(schema) {
|
|
48
|
+
const kind = kindOf(schema);
|
|
49
|
+
switch (kind) {
|
|
50
|
+
case "String":
|
|
51
|
+
return { type: "string" };
|
|
52
|
+
case "Number":
|
|
53
|
+
return { type: "number" };
|
|
54
|
+
case "Integer":
|
|
55
|
+
return { type: "integer" };
|
|
56
|
+
case "Boolean":
|
|
57
|
+
return { type: "boolean" };
|
|
58
|
+
case "Null":
|
|
59
|
+
return { type: "null" };
|
|
60
|
+
case "Literal":
|
|
61
|
+
return convertLiteral(schema);
|
|
62
|
+
case "Union":
|
|
63
|
+
return convertUnion(schema);
|
|
64
|
+
case "Array":
|
|
65
|
+
return convertArray(schema);
|
|
66
|
+
case "Object":
|
|
67
|
+
return convertObject(schema);
|
|
68
|
+
case "Record":
|
|
69
|
+
return convertRecord(schema);
|
|
70
|
+
default:
|
|
71
|
+
throw new UnsupportedSchemaError(kind ?? "(unknown)");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function convertLiteral(schema) {
|
|
75
|
+
const literal = schema;
|
|
76
|
+
const value = literal.const;
|
|
77
|
+
const jsType = literal.type ?? jsonSchemaTypeOf(value);
|
|
78
|
+
return { type: jsType, enum: [value] };
|
|
79
|
+
}
|
|
80
|
+
function jsonSchemaTypeOf(value) {
|
|
81
|
+
if (value === null)
|
|
82
|
+
return "null";
|
|
83
|
+
switch (typeof value) {
|
|
84
|
+
case "string":
|
|
85
|
+
return "string";
|
|
86
|
+
case "number":
|
|
87
|
+
return "number";
|
|
88
|
+
case "bigint":
|
|
89
|
+
return "integer";
|
|
90
|
+
case "boolean":
|
|
91
|
+
return "boolean";
|
|
92
|
+
default:
|
|
93
|
+
throw new Error(`Literal value of type "${typeof value}" cannot be converted to a JSON Schema primitive type.`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function convertUnion(schema) {
|
|
97
|
+
const union = schema;
|
|
98
|
+
const branches = union.anyOf;
|
|
99
|
+
if (branches.length === 0) {
|
|
100
|
+
throw new Error("Cannot convert an empty Type.Union.");
|
|
101
|
+
}
|
|
102
|
+
// Shorthand: collapse a union of same-typed literals into a single
|
|
103
|
+
// `enum`. Mixed-type literal unions still convert correctly via the
|
|
104
|
+
// general anyOf branch — we only collapse when every literal shares
|
|
105
|
+
// the same JSON Schema type.
|
|
106
|
+
if (branches.every(isLiteralKind)) {
|
|
107
|
+
const literalTypes = new Set(branches.map((b) => b.type));
|
|
108
|
+
if (literalTypes.size === 1) {
|
|
109
|
+
const literalType = [...literalTypes][0] ?? "string";
|
|
110
|
+
return {
|
|
111
|
+
type: literalType,
|
|
112
|
+
enum: branches.map((b) => b.const),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return { anyOf: branches.map((b) => typeboxToJsonSchema(b)) };
|
|
117
|
+
}
|
|
118
|
+
function isLiteralKind(schema) {
|
|
119
|
+
return kindOf(schema) === "Literal";
|
|
120
|
+
}
|
|
121
|
+
function convertArray(schema) {
|
|
122
|
+
const array = schema;
|
|
123
|
+
return {
|
|
124
|
+
type: "array",
|
|
125
|
+
items: typeboxToJsonSchema(array.items),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function convertObject(schema) {
|
|
129
|
+
const object = schema;
|
|
130
|
+
const properties = {};
|
|
131
|
+
const required = [];
|
|
132
|
+
for (const [key, propSchema] of Object.entries(object.properties)) {
|
|
133
|
+
// Standard JSON-schema optionality: an `Type.Optional(T)`
|
|
134
|
+
// property is converted as its inner `T` and simply OMITTED
|
|
135
|
+
// from `required`. No null-widening, no forced
|
|
136
|
+
// `additionalProperties: false` — that is the OpenAI-strict
|
|
137
|
+
// fold the Ollama `format` consumer does not want.
|
|
138
|
+
properties[key] = typeboxToJsonSchema(propSchema);
|
|
139
|
+
if (!isOptional(propSchema)) {
|
|
140
|
+
required.push(key);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
type: "object",
|
|
145
|
+
properties,
|
|
146
|
+
required,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
function convertRecord(schema) {
|
|
150
|
+
const record = schema;
|
|
151
|
+
// TypeBox encodes Record(Type.String(), V) as
|
|
152
|
+
// { patternProperties: { "^.*$": V } }. We collapse this to the
|
|
153
|
+
// canonical `additionalProperties: <V>` shape.
|
|
154
|
+
const patterns = Object.values(record.patternProperties);
|
|
155
|
+
if (patterns.length !== 1) {
|
|
156
|
+
throw new Error("Type.Record with multiple pattern keys is not supported by the converter.");
|
|
157
|
+
}
|
|
158
|
+
const valueSchema = patterns[0];
|
|
159
|
+
return {
|
|
160
|
+
type: "object",
|
|
161
|
+
additionalProperties: typeboxToJsonSchema(valueSchema),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=structured-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-output.js","sourceRoot":"","sources":["../../../src/extensions/ollama/structured-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { TOllamaJsonSchema } from "./structured-output.js";
|
|
2
|
+
/**
|
|
3
|
+
* The minimal subset of the `ollama` SDK's `chat()` response we read.
|
|
4
|
+
* We model only the fields the provider touches so a mock client (and
|
|
5
|
+
* a real `ChatResponse`) both satisfy it without importing the SDK type
|
|
6
|
+
* (which would force the optional peer into the type graph).
|
|
7
|
+
*/
|
|
8
|
+
export type TOllamaChatToolCall = {
|
|
9
|
+
function: {
|
|
10
|
+
name: string;
|
|
11
|
+
arguments: Record<string, unknown>;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export type TOllamaChatMessage = {
|
|
15
|
+
role: string;
|
|
16
|
+
content: string;
|
|
17
|
+
tool_calls?: TOllamaChatToolCall[];
|
|
18
|
+
};
|
|
19
|
+
export type TOllamaChatResponse = {
|
|
20
|
+
message: TOllamaChatMessage;
|
|
21
|
+
prompt_eval_count?: number;
|
|
22
|
+
eval_count?: number;
|
|
23
|
+
};
|
|
24
|
+
/** Tool spec in the `ollama` SDK's `chat({ tools })` wire shape. */
|
|
25
|
+
export type TOllamaToolWire = {
|
|
26
|
+
type: "function";
|
|
27
|
+
function: {
|
|
28
|
+
name: string;
|
|
29
|
+
description: string;
|
|
30
|
+
parameters: TOllamaJsonSchema;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
/** The `chat()` request body subset the provider builds. */
|
|
34
|
+
export type TOllamaChatRequest = {
|
|
35
|
+
model: string;
|
|
36
|
+
messages: TOllamaChatMessage[];
|
|
37
|
+
format?: string | object;
|
|
38
|
+
tools?: TOllamaToolWire[];
|
|
39
|
+
stream?: false;
|
|
40
|
+
options?: {
|
|
41
|
+
temperature?: number;
|
|
42
|
+
num_predict?: number;
|
|
43
|
+
num_ctx?: number;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* The slice of the `ollama` SDK client surface the provider depends on:
|
|
48
|
+
* a single `chat()` method and an `abort()` to honor `AbortSignal`.
|
|
49
|
+
* Modeling it as a structural type (rather than importing `Ollama`)
|
|
50
|
+
* keeps the optional peer out of the type graph and gives tests a clean
|
|
51
|
+
* injection seam.
|
|
52
|
+
*/
|
|
53
|
+
export type TOllamaClient = {
|
|
54
|
+
chat(request: TOllamaChatRequest): Promise<TOllamaChatResponse>;
|
|
55
|
+
abort(): void;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* The shape of the dynamically-imported `ollama` module. `Ollama` is
|
|
59
|
+
* the SDK's exported class-constructor name (an external symbol), so it
|
|
60
|
+
* is exempt from the in-repo camelCase property-naming rule.
|
|
61
|
+
*/
|
|
62
|
+
export type TOllamaModule = {
|
|
63
|
+
Ollama: new (config: {
|
|
64
|
+
host: string;
|
|
65
|
+
}) => TOllamaClient;
|
|
66
|
+
};
|
|
67
|
+
export type TOllamaProviderConfig = {
|
|
68
|
+
/** Daemon base URL. Defaults to `http://localhost:11434`. */
|
|
69
|
+
baseUrl?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Pre-built SDK client. Primarily a test seam (inject a mock). When
|
|
72
|
+
* omitted, the provider dynamically imports the `ollama` package and
|
|
73
|
+
* constructs an `Ollama({ host: baseUrl })`; a missing package
|
|
74
|
+
* surfaces as an actionable error at construction time.
|
|
75
|
+
*/
|
|
76
|
+
client?: TOllamaClient;
|
|
77
|
+
/**
|
|
78
|
+
* Context-window size sent as Ollama's `options.num_ctx`. Defaults
|
|
79
|
+
* to a generous **32768**.
|
|
80
|
+
*
|
|
81
|
+
* **Why this is set, and set generously.** Ollama's per-model
|
|
82
|
+
* default `num_ctx` is small (often ~4096) and Ollama **silently
|
|
83
|
+
* truncates** any prompt longer than `num_ctx` — no error is raised;
|
|
84
|
+
* the model dutifully emits schema-valid JSON from a truncated
|
|
85
|
+
* prompt, which then passes the framework's `Value.Check` and yields
|
|
86
|
+
* a quietly-wrong parse. A real v2 ingestion prompt (segmenting a
|
|
87
|
+
* multi-KB argument) easily exceeds 4096 tokens, so without a
|
|
88
|
+
* generous default the stated goal — running the *whole* pipeline
|
|
89
|
+
* locally on real text — would silently misbehave. Raise this
|
|
90
|
+
* further for very large inputs; lower it only if VRAM-constrained
|
|
91
|
+
* and inputs are known to be small.
|
|
92
|
+
*/
|
|
93
|
+
numCtx?: number;
|
|
94
|
+
/**
|
|
95
|
+
* Cap on function-tool agent-loop round-trips before throwing
|
|
96
|
+
* `ToolLoopExhaustedError`. Defaults to 6, mirroring the OpenAI
|
|
97
|
+
* provider. No ingestion stage uses tools, so this is secondary.
|
|
98
|
+
*/
|
|
99
|
+
maxToolCallRounds?: number;
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/extensions/ollama/types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D;;;;;GAKG;AAEH,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACrC,CAAA;CACJ,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,OAAO,EAAE,kBAAkB,CAAA;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,oEAAoE;AACpE,MAAM,MAAM,eAAe,GAAG;IAC1B,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,EAAE,iBAAiB,CAAA;KAChC,CAAA;CACJ,CAAA;AAED,4DAA4D;AAC5D,MAAM,MAAM,kBAAkB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,eAAe,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,OAAO,CAAC,EAAE;QACN,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACJ,CAAA;AAGD;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC/D,KAAK,IAAI,IAAI,CAAA;CAChB,CAAA;AAED;;;;GAIG;AAEH,MAAM,MAAM,aAAa,GAAG;IACxB,MAAM,EAAE,KAAK,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,aAAa,CAAA;CAC1D,CAAA;AAGD,MAAM,MAAM,qBAAqB,GAAG;IAChC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Extension-internal types for the Ollama provider.
|
|
2
|
+
//
|
|
3
|
+
// Property names on the SDK request/response shapes are *wire* names
|
|
4
|
+
// dictated by the Ollama HTTP API (snake_case); the in-repo brain-style
|
|
5
|
+
// camelCase rule does not apply to external wire formats.
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/extensions/ollama/types.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,qEAAqE;AACrE,wEAAwE;AACxE,0DAA0D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/lib/parsing/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/lib/parsing/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAiRhD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,cAAc,EAAE,OAAO,EACvB,OAAO,CAAC,EAAE,cAAc,GACzB,MAAM,CAYR"}
|
|
@@ -84,6 +84,8 @@ Abbreviations are encouraged to keep symbols short. Aim for under 20 characters
|
|
|
84
84
|
|
|
85
85
|
When formulating claims, write in third person, present tense, active voice. Each claim should be a clear, standalone declarative sentence.
|
|
86
86
|
|
|
87
|
+
State the proposition itself — never prepend an author-attributive reporting frame such as "The author claims that…", "The author argues…", "The writer believes…", or "According to the author…". Write *what is asserted*, not *that someone asserts it*: emit "Rain wets the ground," not "The author claims that rain wets the ground." (This applies only to author-attribution of the argument's own claims. Citation claims that summarize what an external **cited source** asserts — e.g. "NASA reports a temperature rise" — keep that source attribution; it is intentional and not the target here.)
|
|
88
|
+
|
|
87
89
|
## Claim Types
|
|
88
90
|
|
|
89
91
|
Every claim has a \`type\` field, which is one of:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/lib/parsing/prompt-builder.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAC3D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAA;AACvE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;AACxD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IAC/B,QAAQ;IACR,WAAW;IACX,UAAU;IACV,yBAAyB;CAC5B,CAAC,CAAA;AACF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IAC/B,UAAU;IACV,mBAAmB;IACnB,oBAAoB;IACpB,aAAa;CAChB,CAAC,CAAA;AAEF,MAAM,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/lib/parsing/prompt-builder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proposit/proposit-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Core engine for building and manipulating propositional logic arguments.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -37,6 +37,11 @@
|
|
|
37
37
|
"types": "./dist/extensions/openai/index.d.ts",
|
|
38
38
|
"import": "./dist/extensions/openai/index.js",
|
|
39
39
|
"default": "./dist/extensions/openai/index.js"
|
|
40
|
+
},
|
|
41
|
+
"./extensions/ollama": {
|
|
42
|
+
"types": "./dist/extensions/ollama/index.d.ts",
|
|
43
|
+
"import": "./dist/extensions/ollama/index.js",
|
|
44
|
+
"default": "./dist/extensions/ollama/index.js"
|
|
40
45
|
}
|
|
41
46
|
},
|
|
42
47
|
"bin": {
|
|
@@ -59,6 +64,7 @@
|
|
|
59
64
|
"eslint-plugin-check-file": "^3.3.1",
|
|
60
65
|
"eslint-plugin-n": "^17.24.0",
|
|
61
66
|
"globals": "^17.4.0",
|
|
67
|
+
"ollama": "^0.6.3",
|
|
62
68
|
"peggy": "^5.1.0",
|
|
63
69
|
"prettier": "^3.8.1",
|
|
64
70
|
"typedoc": "^0.28.18",
|
|
@@ -72,9 +78,13 @@
|
|
|
72
78
|
"yaml": "^2.8.3"
|
|
73
79
|
},
|
|
74
80
|
"peerDependencies": {
|
|
81
|
+
"ollama": ">=0.5.0",
|
|
75
82
|
"openai": ">=4.0.0"
|
|
76
83
|
},
|
|
77
84
|
"peerDependenciesMeta": {
|
|
85
|
+
"ollama": {
|
|
86
|
+
"optional": true
|
|
87
|
+
},
|
|
78
88
|
"openai": {
|
|
79
89
|
"optional": true
|
|
80
90
|
}
|