@promptbook/utils 0.72.0-0 → 0.72.0-2
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/README.md +5 -6
- package/esm/index.es.js +153 -114
- package/esm/index.es.js.map +1 -1
- package/esm/typings/src/_packages/cli.index.d.ts +4 -0
- package/esm/typings/src/_packages/core.index.d.ts +11 -1
- package/esm/typings/src/_packages/openai.index.d.ts +4 -0
- package/esm/typings/src/_packages/types.index.d.ts +12 -0
- package/esm/typings/src/_packages/utils.index.d.ts +4 -4
- package/esm/typings/src/commands/FOREACH/ForeachCommand.d.ts +3 -2
- package/esm/typings/src/commands/FOREACH/ForeachJson.d.ts +23 -0
- package/esm/typings/src/commands/FOREACH/foreachCommandParser.d.ts +1 -1
- package/esm/typings/src/commands/_common/types/CommandParser.d.ts +16 -1
- package/esm/typings/src/config.d.ts +14 -1
- package/esm/typings/src/conversion/prettify/renderPipelineMermaidOptions.d.ts +3 -0
- package/esm/typings/src/conversion/utils/extractParameterNamesFromTemplate.d.ts +2 -1
- package/esm/typings/src/conversion/validation/validatePipeline.d.ts +5 -0
- package/esm/typings/src/execution/PipelineExecutorResult.d.ts +9 -8
- package/esm/typings/src/execution/createPipelineExecutor/$OngoingTemplateResult.d.ts +45 -0
- package/esm/typings/src/execution/createPipelineExecutor/00-CreatePipelineExecutorOptions.d.ts +20 -0
- package/esm/typings/src/execution/createPipelineExecutor/00-CreatePipelineExecutorSettings.d.ts +40 -0
- package/esm/typings/src/execution/createPipelineExecutor/00-createPipelineExecutor.d.ts +10 -0
- package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +55 -0
- package/esm/typings/src/execution/createPipelineExecutor/20-executeTemplate.d.ts +62 -0
- package/esm/typings/src/execution/createPipelineExecutor/30-executeFormatCells.d.ts +19 -0
- package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +74 -0
- package/esm/typings/src/execution/createPipelineExecutor/filterJustOutputParameters.d.ts +34 -0
- package/esm/typings/src/execution/createPipelineExecutor/getContextForTemplate.d.ts +10 -0
- package/esm/typings/src/execution/createPipelineExecutor/getKnowledgeForTemplate.d.ts +27 -0
- package/esm/typings/src/execution/createPipelineExecutor/getReservedParametersForTemplate.d.ts +30 -0
- package/esm/typings/src/execution/createPipelineExecutor/getSamplesForTemplate.d.ts +10 -0
- package/esm/typings/src/execution/utils/checkExpectations.d.ts +2 -0
- package/esm/typings/src/execution/utils/usageToHuman.d.ts +3 -4
- package/esm/typings/src/formats/_common/FormatDefinition.d.ts +14 -15
- package/esm/typings/src/formats/_common/FormatSubvalueDefinition.d.ts +30 -0
- package/esm/typings/src/formats/csv/{ListFormatDefinition.d.ts → CsvFormatDefinition.d.ts} +6 -3
- package/esm/typings/src/formats/csv/CsvSettings.d.ts +13 -0
- package/esm/typings/src/formats/index.d.ts +1 -1
- package/esm/typings/src/formats/json/JsonFormatDefinition.d.ts +4 -3
- package/esm/typings/src/formats/text/TextFormatDefinition.d.ts +19 -0
- package/esm/typings/src/formats/xml/XmlFormatDefinition.d.ts +4 -3
- package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +1 -1
- package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionToolsOptions.d.ts +1 -1
- package/esm/typings/src/llm-providers/openai/OpenAiExecutionTools.d.ts +9 -0
- package/esm/typings/src/llm-providers/openai/createOpenAiAssistantExecutionTools.d.ts +15 -0
- package/esm/typings/src/llm-providers/openai/register-configuration.d.ts +9 -0
- package/esm/typings/src/llm-providers/openai/register-constructor.d.ts +9 -0
- package/esm/typings/src/types/PipelineJson/ParameterJson.d.ts +1 -0
- package/esm/typings/src/types/PipelineJson/TemplateJsonCommon.d.ts +5 -0
- package/esm/typings/src/types/execution-report/ExecutionReportJson.d.ts +3 -0
- package/esm/typings/src/utils/expectation-counters/index.d.ts +3 -0
- package/esm/typings/src/utils/organization/{f.d.ts → empty_object.d.ts} +5 -1
- package/esm/typings/src/utils/organization/just_empty_object.d.ts +12 -0
- package/esm/typings/src/utils/{extractParameterNames.d.ts → parameters/extractParameterNames.d.ts} +2 -2
- package/esm/typings/src/utils/parameters/mapAvailableToExpectedParameters.d.ts +27 -0
- package/esm/typings/src/utils/{replaceParameters.d.ts → parameters/replaceParameters.d.ts} +2 -2
- package/esm/typings/src/utils/validators/parameterName/validateParameterName.d.ts +10 -0
- package/esm/typings/src/utils/validators/parameterName/validateParameterName.test.d.ts +1 -0
- package/package.json +16 -12
- package/umd/index.umd.js +153 -114
- package/umd/index.umd.js.map +1 -1
- package/esm/typings/src/execution/createPipelineExecutor.d.ts +0 -72
- package/esm/typings/src/formats/list/ListFormatDefinition.d.ts +0 -16
- /package/esm/typings/src/utils/{extractParameterNames.test.d.ts → parameters/extractParameterNames.test.d.ts} +0 -0
- /package/esm/typings/src/{execution/utils/usageToHuman.test.d.ts → utils/parameters/mapAvailableToExpectedParameters.test.d.ts} +0 -0
- /package/esm/typings/src/utils/{replaceParameters.test.d.ts → parameters/replaceParameters.test.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -16,6 +16,10 @@ Supercharge your use of large language models
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
|
+
## ✨ New Features
|
|
20
|
+
|
|
21
|
+
- ✨ **Support of [OpenAI o1 model](https://openai.com/o1/)**
|
|
22
|
+
|
|
19
23
|
## 📦 Package `@promptbook/utils`
|
|
20
24
|
|
|
21
25
|
- Promptbooks are [divided into several](#-packages) packages, all are published from [single monorepo](https://github.com/webgptorg/promptbook).
|
|
@@ -28,7 +32,7 @@ To install this package, run:
|
|
|
28
32
|
npm i ptbk
|
|
29
33
|
|
|
30
34
|
# Install just this package to save space
|
|
31
|
-
npm
|
|
35
|
+
npm install @promptbook/utils
|
|
32
36
|
```
|
|
33
37
|
|
|
34
38
|
Utility functions used in the library but also useful for individual use in preprocessing and postprocessing LLM inputs and outputs
|
|
@@ -159,10 +163,6 @@ See also the documentation for all the functions in the `@promptbook/utils` pack
|
|
|
159
163
|
|
|
160
164
|
Rest of the documentation is common for **entire promptbook ecosystem**:
|
|
161
165
|
|
|
162
|
-
# ✨ New Features
|
|
163
|
-
|
|
164
|
-
- ✨ **Support [OpenAI o1 model](https://openai.com/o1/)**
|
|
165
|
-
|
|
166
166
|
## 🤍 The Promptbook Whitepaper
|
|
167
167
|
|
|
168
168
|
|
|
@@ -209,7 +209,6 @@ File `write-website-content.ptbk.md`:
|
|
|
209
209
|
> Instructions for creating web page content.
|
|
210
210
|
>
|
|
211
211
|
> - PIPELINE URL https://promptbook.studio/webgpt/write-website-content.ptbk.md
|
|
212
|
-
> - PROMPTBOOK VERSION 0.0.1
|
|
213
212
|
> - INPUT PARAM `{rawTitle}` Automatically suggested a site name or empty text
|
|
214
213
|
> - INPUT PARAM `{rawAssigment}` Automatically generated site entry from image recognition
|
|
215
214
|
> - OUTPUT PARAM `{websiteContent}` Web content
|
package/esm/index.es.js
CHANGED
|
@@ -4,7 +4,7 @@ import spaceTrim$1, { spaceTrim } from 'spacetrim';
|
|
|
4
4
|
/**
|
|
5
5
|
* The version of the Promptbook library
|
|
6
6
|
*/
|
|
7
|
-
var PROMPTBOOK_VERSION = '0.
|
|
7
|
+
var PROMPTBOOK_VERSION = '0.72.0-1';
|
|
8
8
|
// TODO:[main] !!!! List here all the versions and annotate + put into script
|
|
9
9
|
|
|
10
10
|
/*! *****************************************************************************
|
|
@@ -625,6 +625,9 @@ function renderPromptbookMermaid(pipelineJson, options) {
|
|
|
625
625
|
return promptbookMermaid;
|
|
626
626
|
}
|
|
627
627
|
/**
|
|
628
|
+
* TODO: !!!!! FOREACH in mermaid graph
|
|
629
|
+
* TODO: !!!!! Knowledge in mermaid graph
|
|
630
|
+
* TODO: !!!!! Personas in mermaid graph
|
|
628
631
|
* TODO: Maybe use some Mermaid package instead of string templating
|
|
629
632
|
* TODO: [🕌] When more than 2 functionalities, split into separate functions
|
|
630
633
|
*/
|
|
@@ -734,52 +737,72 @@ function extractVariables(script) {
|
|
|
734
737
|
* @public exported from `@promptbook/utils`
|
|
735
738
|
*/
|
|
736
739
|
function extractParameterNamesFromTemplate(template) {
|
|
737
|
-
var e_1, _a, e_2, _b, e_3, _c;
|
|
738
|
-
var title = template.title, description = template.description, templateType = template.templateType, content = template.content, preparedContent = template.preparedContent, jokerParameterNames = template.jokerParameterNames;
|
|
740
|
+
var e_1, _a, e_2, _b, e_3, _c, e_4, _d;
|
|
741
|
+
var title = template.title, description = template.description, templateType = template.templateType, content = template.content, preparedContent = template.preparedContent, jokerParameterNames = template.jokerParameterNames, foreach = template.foreach;
|
|
739
742
|
var parameterNames = new Set();
|
|
740
743
|
try {
|
|
741
|
-
for (var
|
|
742
|
-
var parameterName =
|
|
744
|
+
for (var _e = __values(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(extractParameterNames(title)), false), __read(extractParameterNames(description || '')), false), __read(extractParameterNames(content)), false), __read(extractParameterNames(preparedContent || '')), false)), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
745
|
+
var parameterName = _f.value;
|
|
743
746
|
parameterNames.add(parameterName);
|
|
744
747
|
}
|
|
745
748
|
}
|
|
746
749
|
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
747
750
|
finally {
|
|
748
751
|
try {
|
|
749
|
-
if (
|
|
752
|
+
if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
|
|
750
753
|
}
|
|
751
754
|
finally { if (e_1) throw e_1.error; }
|
|
752
755
|
}
|
|
753
756
|
if (templateType === 'SCRIPT_TEMPLATE') {
|
|
754
757
|
try {
|
|
755
|
-
for (var
|
|
756
|
-
var parameterName =
|
|
758
|
+
for (var _g = __values(extractVariables(content)), _h = _g.next(); !_h.done; _h = _g.next()) {
|
|
759
|
+
var parameterName = _h.value;
|
|
757
760
|
parameterNames.add(parameterName);
|
|
758
761
|
}
|
|
759
762
|
}
|
|
760
763
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
761
764
|
finally {
|
|
762
765
|
try {
|
|
763
|
-
if (
|
|
766
|
+
if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
|
|
764
767
|
}
|
|
765
768
|
finally { if (e_2) throw e_2.error; }
|
|
766
769
|
}
|
|
767
770
|
}
|
|
768
771
|
try {
|
|
769
|
-
for (var
|
|
770
|
-
var jokerName =
|
|
772
|
+
for (var _j = __values(jokerParameterNames || []), _k = _j.next(); !_k.done; _k = _j.next()) {
|
|
773
|
+
var jokerName = _k.value;
|
|
771
774
|
parameterNames.add(jokerName);
|
|
772
775
|
}
|
|
773
776
|
}
|
|
774
777
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
775
778
|
finally {
|
|
776
779
|
try {
|
|
777
|
-
if (
|
|
780
|
+
if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
|
|
778
781
|
}
|
|
779
782
|
finally { if (e_3) throw e_3.error; }
|
|
780
783
|
}
|
|
781
784
|
parameterNames.delete('content');
|
|
782
785
|
// <- Note {websiteContent} is used in `preparedContent`
|
|
786
|
+
// Note: [🍭] Fixing dependent subparameterName from FOREACH command
|
|
787
|
+
if (foreach !== undefined) {
|
|
788
|
+
try {
|
|
789
|
+
for (var _l = __values(foreach.subparameterNames), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
790
|
+
var subparameterName = _m.value;
|
|
791
|
+
if (parameterNames.has(subparameterName)) {
|
|
792
|
+
parameterNames.delete(subparameterName);
|
|
793
|
+
parameterNames.add(foreach.parameterName);
|
|
794
|
+
// <- TODO: [🚎] Warn/logic error when `subparameterName` not used
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
799
|
+
finally {
|
|
800
|
+
try {
|
|
801
|
+
if (_m && !_m.done && (_d = _l.return)) _d.call(_l);
|
|
802
|
+
}
|
|
803
|
+
finally { if (e_4) throw e_4.error; }
|
|
804
|
+
}
|
|
805
|
+
}
|
|
783
806
|
return parameterNames;
|
|
784
807
|
}
|
|
785
808
|
/**
|
|
@@ -1264,6 +1287,9 @@ var CountUtils = {
|
|
|
1264
1287
|
LINES: countLines,
|
|
1265
1288
|
PAGES: countPages,
|
|
1266
1289
|
};
|
|
1290
|
+
/**
|
|
1291
|
+
* TODO: [🧠][🤠] This should be probbably as part of `TextFormatDefinition`
|
|
1292
|
+
*/
|
|
1267
1293
|
|
|
1268
1294
|
/**
|
|
1269
1295
|
* Makes first letter of a string uppercase
|
|
@@ -1518,108 +1544,6 @@ function searchKeywords(haystack, needle) {
|
|
|
1518
1544
|
return true;
|
|
1519
1545
|
}
|
|
1520
1546
|
|
|
1521
|
-
/**
|
|
1522
|
-
* Function parseNumber will parse number from string
|
|
1523
|
-
*
|
|
1524
|
-
* Unlike Number.parseInt, Number.parseFloat it will never ever result in NaN
|
|
1525
|
-
* Note: it also works only with decimal numbers
|
|
1526
|
-
*
|
|
1527
|
-
* @returns parsed number
|
|
1528
|
-
* @throws {ParseError} if the value is not a number
|
|
1529
|
-
*
|
|
1530
|
-
* @public exported from `@promptbook/utils`
|
|
1531
|
-
*/
|
|
1532
|
-
function parseNumber(value) {
|
|
1533
|
-
var originalValue = value;
|
|
1534
|
-
if (typeof value === 'number') {
|
|
1535
|
-
value = value.toString(); // <- TODO: Maybe more efficient way to do this
|
|
1536
|
-
}
|
|
1537
|
-
if (typeof value !== 'string') {
|
|
1538
|
-
return 0;
|
|
1539
|
-
}
|
|
1540
|
-
value = value.trim();
|
|
1541
|
-
if (value.startsWith('+')) {
|
|
1542
|
-
return parseNumber(value.substring(1));
|
|
1543
|
-
}
|
|
1544
|
-
if (value.startsWith('-')) {
|
|
1545
|
-
var number = parseNumber(value.substring(1));
|
|
1546
|
-
if (number === 0) {
|
|
1547
|
-
return 0; // <- Note: To prevent -0
|
|
1548
|
-
}
|
|
1549
|
-
return -number;
|
|
1550
|
-
}
|
|
1551
|
-
value = value.replace(/,/g, '.');
|
|
1552
|
-
value = value.toUpperCase();
|
|
1553
|
-
if (value === '') {
|
|
1554
|
-
return 0;
|
|
1555
|
-
}
|
|
1556
|
-
if (value === '♾' || value.startsWith('INF')) {
|
|
1557
|
-
return Infinity;
|
|
1558
|
-
}
|
|
1559
|
-
if (value.includes('/')) {
|
|
1560
|
-
var _a = __read(value.split('/'), 2), numerator_ = _a[0], denominator_ = _a[1];
|
|
1561
|
-
var numerator = parseNumber(numerator_);
|
|
1562
|
-
var denominator = parseNumber(denominator_);
|
|
1563
|
-
if (denominator === 0) {
|
|
1564
|
-
throw new ParseError("Unable to parse number from \"".concat(originalValue, "\" because denominator is zero"));
|
|
1565
|
-
}
|
|
1566
|
-
return numerator / denominator;
|
|
1567
|
-
}
|
|
1568
|
-
if (/^(NAN|NULL|NONE|UNDEFINED|ZERO|NO.*)$/.test(value)) {
|
|
1569
|
-
return 0;
|
|
1570
|
-
}
|
|
1571
|
-
if (value.includes('E')) {
|
|
1572
|
-
var _b = __read(value.split('E'), 2), significand = _b[0], exponent = _b[1];
|
|
1573
|
-
return parseNumber(significand) * Math.pow(10, parseNumber(exponent));
|
|
1574
|
-
}
|
|
1575
|
-
if (!/^[0-9.]+$/.test(value) || value.split('.').length > 2) {
|
|
1576
|
-
throw new ParseError("Unable to parse number from \"".concat(originalValue, "\""));
|
|
1577
|
-
}
|
|
1578
|
-
var num = parseFloat(value);
|
|
1579
|
-
if (isNaN(num)) {
|
|
1580
|
-
throw new ParseError("Unexpected NaN when parsing number from \"".concat(originalValue, "\""));
|
|
1581
|
-
}
|
|
1582
|
-
return num;
|
|
1583
|
-
}
|
|
1584
|
-
/**
|
|
1585
|
-
* TODO: Maybe use sth. like safe-eval in fraction/calculation case @see https://www.npmjs.com/package/safe-eval
|
|
1586
|
-
* TODO: [🧠][🌻] Maybe export through `@promptbook/markdown-utils` not `@promptbook/utils`
|
|
1587
|
-
*/
|
|
1588
|
-
|
|
1589
|
-
/**
|
|
1590
|
-
* Generates random seed
|
|
1591
|
-
*
|
|
1592
|
-
* Note: `$` is used to indicate that this function is not a pure function - it is not deterministic
|
|
1593
|
-
* Warning: This function is not cryptographically secure (it uses Math.random internally)
|
|
1594
|
-
* @public exported from `@promptbook/utils`
|
|
1595
|
-
*/
|
|
1596
|
-
function $randomSeed() {
|
|
1597
|
-
return Math.random();
|
|
1598
|
-
}
|
|
1599
|
-
|
|
1600
|
-
/**
|
|
1601
|
-
* Removes quotes from a string
|
|
1602
|
-
*
|
|
1603
|
-
* Tip: This is very usefull for post-processing of the result of the LLM model
|
|
1604
|
-
* Note: This function removes only the same quotes from the beginning and the end of the string
|
|
1605
|
-
* Note: There are two simmilar functions:
|
|
1606
|
-
* - `removeQuotes` which removes only bounding quotes
|
|
1607
|
-
* - `unwrapResult` which removes whole introduce sentence
|
|
1608
|
-
*
|
|
1609
|
-
* @param text optionally quoted text
|
|
1610
|
-
* @returns text without quotes
|
|
1611
|
-
* @public exported from `@promptbook/utils`
|
|
1612
|
-
*/
|
|
1613
|
-
function removeQuotes(text) {
|
|
1614
|
-
if (text.startsWith('"') && text.endsWith('"')) {
|
|
1615
|
-
return text.slice(1, -1);
|
|
1616
|
-
}
|
|
1617
|
-
if (text.startsWith('\'') && text.endsWith('\'')) {
|
|
1618
|
-
return text.slice(1, -1);
|
|
1619
|
-
}
|
|
1620
|
-
return text;
|
|
1621
|
-
}
|
|
1622
|
-
|
|
1623
1547
|
/**
|
|
1624
1548
|
* @@@
|
|
1625
1549
|
*
|
|
@@ -1822,6 +1746,7 @@ $asDeeplyFrozenSerializableJson('RESERVED_PARAMETER_NAMES', [
|
|
|
1822
1746
|
'samples',
|
|
1823
1747
|
'modelName',
|
|
1824
1748
|
'currentDate',
|
|
1749
|
+
// <- TODO: !!!!! list here all command names
|
|
1825
1750
|
// <- TODO: Add more like 'date', 'modelName',...
|
|
1826
1751
|
// <- TODO: Add [emoji] + instructions ACRY when adding new reserved parameter
|
|
1827
1752
|
]);
|
|
@@ -1837,6 +1762,18 @@ var RESERVED_PARAMETER_MISSING_VALUE = 'MISSING-' + REPLACING_NONCE;
|
|
|
1837
1762
|
* @private within the repository
|
|
1838
1763
|
*/
|
|
1839
1764
|
var RESERVED_PARAMETER_RESTRICTED = 'RESTRICTED-' + REPLACING_NONCE;
|
|
1765
|
+
// <- TODO: [🧜♂️]
|
|
1766
|
+
/**
|
|
1767
|
+
* @@@
|
|
1768
|
+
*
|
|
1769
|
+
* @public exported from `@promptbook/core`
|
|
1770
|
+
*/
|
|
1771
|
+
Object.freeze({
|
|
1772
|
+
delimiter: ',',
|
|
1773
|
+
quoteChar: '"',
|
|
1774
|
+
newline: '\n',
|
|
1775
|
+
skipEmptyLines: true,
|
|
1776
|
+
});
|
|
1840
1777
|
/**
|
|
1841
1778
|
* TODO: [🧠][🧜♂️] Maybe join remoteUrl and path into single value
|
|
1842
1779
|
*/
|
|
@@ -1920,6 +1857,108 @@ function replaceParameters(template, parameters) {
|
|
|
1920
1857
|
return replacedTemplate;
|
|
1921
1858
|
}
|
|
1922
1859
|
|
|
1860
|
+
/**
|
|
1861
|
+
* Function parseNumber will parse number from string
|
|
1862
|
+
*
|
|
1863
|
+
* Unlike Number.parseInt, Number.parseFloat it will never ever result in NaN
|
|
1864
|
+
* Note: it also works only with decimal numbers
|
|
1865
|
+
*
|
|
1866
|
+
* @returns parsed number
|
|
1867
|
+
* @throws {ParseError} if the value is not a number
|
|
1868
|
+
*
|
|
1869
|
+
* @public exported from `@promptbook/utils`
|
|
1870
|
+
*/
|
|
1871
|
+
function parseNumber(value) {
|
|
1872
|
+
var originalValue = value;
|
|
1873
|
+
if (typeof value === 'number') {
|
|
1874
|
+
value = value.toString(); // <- TODO: Maybe more efficient way to do this
|
|
1875
|
+
}
|
|
1876
|
+
if (typeof value !== 'string') {
|
|
1877
|
+
return 0;
|
|
1878
|
+
}
|
|
1879
|
+
value = value.trim();
|
|
1880
|
+
if (value.startsWith('+')) {
|
|
1881
|
+
return parseNumber(value.substring(1));
|
|
1882
|
+
}
|
|
1883
|
+
if (value.startsWith('-')) {
|
|
1884
|
+
var number = parseNumber(value.substring(1));
|
|
1885
|
+
if (number === 0) {
|
|
1886
|
+
return 0; // <- Note: To prevent -0
|
|
1887
|
+
}
|
|
1888
|
+
return -number;
|
|
1889
|
+
}
|
|
1890
|
+
value = value.replace(/,/g, '.');
|
|
1891
|
+
value = value.toUpperCase();
|
|
1892
|
+
if (value === '') {
|
|
1893
|
+
return 0;
|
|
1894
|
+
}
|
|
1895
|
+
if (value === '♾' || value.startsWith('INF')) {
|
|
1896
|
+
return Infinity;
|
|
1897
|
+
}
|
|
1898
|
+
if (value.includes('/')) {
|
|
1899
|
+
var _a = __read(value.split('/'), 2), numerator_ = _a[0], denominator_ = _a[1];
|
|
1900
|
+
var numerator = parseNumber(numerator_);
|
|
1901
|
+
var denominator = parseNumber(denominator_);
|
|
1902
|
+
if (denominator === 0) {
|
|
1903
|
+
throw new ParseError("Unable to parse number from \"".concat(originalValue, "\" because denominator is zero"));
|
|
1904
|
+
}
|
|
1905
|
+
return numerator / denominator;
|
|
1906
|
+
}
|
|
1907
|
+
if (/^(NAN|NULL|NONE|UNDEFINED|ZERO|NO.*)$/.test(value)) {
|
|
1908
|
+
return 0;
|
|
1909
|
+
}
|
|
1910
|
+
if (value.includes('E')) {
|
|
1911
|
+
var _b = __read(value.split('E'), 2), significand = _b[0], exponent = _b[1];
|
|
1912
|
+
return parseNumber(significand) * Math.pow(10, parseNumber(exponent));
|
|
1913
|
+
}
|
|
1914
|
+
if (!/^[0-9.]+$/.test(value) || value.split('.').length > 2) {
|
|
1915
|
+
throw new ParseError("Unable to parse number from \"".concat(originalValue, "\""));
|
|
1916
|
+
}
|
|
1917
|
+
var num = parseFloat(value);
|
|
1918
|
+
if (isNaN(num)) {
|
|
1919
|
+
throw new ParseError("Unexpected NaN when parsing number from \"".concat(originalValue, "\""));
|
|
1920
|
+
}
|
|
1921
|
+
return num;
|
|
1922
|
+
}
|
|
1923
|
+
/**
|
|
1924
|
+
* TODO: Maybe use sth. like safe-eval in fraction/calculation case @see https://www.npmjs.com/package/safe-eval
|
|
1925
|
+
* TODO: [🧠][🌻] Maybe export through `@promptbook/markdown-utils` not `@promptbook/utils`
|
|
1926
|
+
*/
|
|
1927
|
+
|
|
1928
|
+
/**
|
|
1929
|
+
* Generates random seed
|
|
1930
|
+
*
|
|
1931
|
+
* Note: `$` is used to indicate that this function is not a pure function - it is not deterministic
|
|
1932
|
+
* Warning: This function is not cryptographically secure (it uses Math.random internally)
|
|
1933
|
+
* @public exported from `@promptbook/utils`
|
|
1934
|
+
*/
|
|
1935
|
+
function $randomSeed() {
|
|
1936
|
+
return Math.random();
|
|
1937
|
+
}
|
|
1938
|
+
|
|
1939
|
+
/**
|
|
1940
|
+
* Removes quotes from a string
|
|
1941
|
+
*
|
|
1942
|
+
* Tip: This is very usefull for post-processing of the result of the LLM model
|
|
1943
|
+
* Note: This function removes only the same quotes from the beginning and the end of the string
|
|
1944
|
+
* Note: There are two simmilar functions:
|
|
1945
|
+
* - `removeQuotes` which removes only bounding quotes
|
|
1946
|
+
* - `unwrapResult` which removes whole introduce sentence
|
|
1947
|
+
*
|
|
1948
|
+
* @param text optionally quoted text
|
|
1949
|
+
* @returns text without quotes
|
|
1950
|
+
* @public exported from `@promptbook/utils`
|
|
1951
|
+
*/
|
|
1952
|
+
function removeQuotes(text) {
|
|
1953
|
+
if (text.startsWith('"') && text.endsWith('"')) {
|
|
1954
|
+
return text.slice(1, -1);
|
|
1955
|
+
}
|
|
1956
|
+
if (text.startsWith('\'') && text.endsWith('\'')) {
|
|
1957
|
+
return text.slice(1, -1);
|
|
1958
|
+
}
|
|
1959
|
+
return text;
|
|
1960
|
+
}
|
|
1961
|
+
|
|
1923
1962
|
/**
|
|
1924
1963
|
* @@@
|
|
1925
1964
|
*
|