@zimtsui/iterflow 0.0.8 → 0.0.10
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 +3 -110
- package/build/evaluation.d.ts +15 -0
- package/build/evaluation.js +35 -0
- package/build/evaluation.js.map +1 -0
- package/build/exports.d.ts +3 -1
- package/build/exports.js +3 -1
- package/build/exports.js.map +1 -1
- package/build/opteva.d.ts +3 -72
- package/build/opteva.js +27 -291
- package/build/opteva.js.map +1 -1
- package/build/optimization.d.ts +30 -0
- package/build/optimization.js +99 -0
- package/build/optimization.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types.d.ts +23 -0
- package/build/types.js +40 -0
- package/build/types.js.map +1 -0
- package/package.json +7 -7
- package/build/exceptions.d.ts +0 -8
- package/build/exceptions.js +0 -13
- package/build/exceptions.js.map +0 -1
- package/build/test.d.ts +0 -1
- package/build/test.js +0 -281
- package/build/test.js.map +0 -1
package/README.md
CHANGED
|
@@ -6,115 +6,8 @@ Iterflow is an AI workflow orchestrator specifically designed for Optimizer-Eval
|
|
|
6
6
|
|
|
7
7
|
## Examples
|
|
8
8
|
|
|
9
|
-
### Optimizer
|
|
9
|
+
### [Optimizer](./examples/optimize.ts)
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
import { Opposition, Optimization, Rejection } from '@zimtsui/iterflow';
|
|
13
|
-
import OpenAI from 'openai';
|
|
14
|
-
declare const openai: OpenAI;
|
|
11
|
+
### [Evaluator](./examples/evaluate.ts)
|
|
15
12
|
|
|
16
|
-
|
|
17
|
-
const messages: OpenAI.ChatCompletionMessageParam[] = [
|
|
18
|
-
{
|
|
19
|
-
role: 'system',
|
|
20
|
-
content: [
|
|
21
|
-
'Please solve math problems.',
|
|
22
|
-
'Your answer will be evaluated and the feedback will be provided if the answer is rejected.'
|
|
23
|
-
].join(' ')
|
|
24
|
-
},
|
|
25
|
-
{ role: 'user', content: problem },
|
|
26
|
-
];
|
|
27
|
-
for (;;) try {
|
|
28
|
-
const completion = await openai.chat.completions.create({ model: 'gpt-4o', messages });
|
|
29
|
-
messages.push(completion.choices[0]!.message);
|
|
30
|
-
if (completion.choices[0]!.message.content! === 'OPPOSE')
|
|
31
|
-
return yield new Opposition('My answer is correct.');
|
|
32
|
-
else
|
|
33
|
-
return yield completion.choices[0]!.message.content!;
|
|
34
|
-
} catch (e) {
|
|
35
|
-
if (e instanceof Rejection) {} else throw e;
|
|
36
|
-
messages.push({
|
|
37
|
-
role: 'user',
|
|
38
|
-
content: `Your answer is rejected: ${e.message}. Please revise your answer.`,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Evaluator
|
|
45
|
-
|
|
46
|
-
```ts
|
|
47
|
-
import { Evaluation, Rejection, Opposition } from '@zimtsui/iterflow';
|
|
48
|
-
import OpenAI from 'openai';
|
|
49
|
-
declare const openai: OpenAI;
|
|
50
|
-
|
|
51
|
-
export async function *evaluate(problem: string): Evaluation.Raw<string> {
|
|
52
|
-
let draft = yield new Evaluation.FirstYield();
|
|
53
|
-
const messages: OpenAI.ChatCompletionMessageParam[] = [
|
|
54
|
-
{
|
|
55
|
-
role: 'system',
|
|
56
|
-
content: [
|
|
57
|
-
'Please examine the given answer of the given math problem.',
|
|
58
|
-
'Print only `ACCEPT` if it is correct.',
|
|
59
|
-
].join(' '),
|
|
60
|
-
},
|
|
61
|
-
{ role: 'user', content: `Problem: ${problem}\n\nAnswer: ${draft}` },
|
|
62
|
-
];
|
|
63
|
-
for (;;) try {
|
|
64
|
-
const completion = await openai.chat.completions.create({ model: 'gpt-4o', messages });
|
|
65
|
-
messages.push(completion.choices[0]!.message);
|
|
66
|
-
if (completion.choices[0]!.message.content === 'ACCEPT') draft = yield draft;
|
|
67
|
-
else draft = yield new Rejection(completion.choices[0]!.message.content!);
|
|
68
|
-
messages.push({
|
|
69
|
-
role: 'user',
|
|
70
|
-
content: `The answer is updated: ${draft}\n\nPlease examine it again.`,
|
|
71
|
-
});
|
|
72
|
-
} catch (e) {
|
|
73
|
-
if (e instanceof Opposition) {} else throw e;
|
|
74
|
-
messages.push({
|
|
75
|
-
role: 'user',
|
|
76
|
-
content: `Your rejection is opposed: ${e.message}\n\nPlease examine it again.`,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Workflow
|
|
83
|
-
|
|
84
|
-
```ts
|
|
85
|
-
import { Optimization, Evaluation, opteva, Rejection } from '@zimtsui/iterflow';
|
|
86
|
-
import { optimize } from './optimize.ts';
|
|
87
|
-
import { evaluate } from './evaluate.ts';
|
|
88
|
-
const evaluate1: (problem: string) => Evaluation.Raw<string, string> = evaluate;
|
|
89
|
-
declare const evaluate2: (problem: string) => Evaluation.Raw<string, number>;
|
|
90
|
-
declare const evaluate3: (problem: string) => Evaluation.Raw<number, number>;
|
|
91
|
-
|
|
92
|
-
export async function workflow(problem: string): Promise<number> {
|
|
93
|
-
await using optimization = Optimization.Cache.from(optimize(problem));
|
|
94
|
-
await using evaluation1 = await Evaluation.Initialized.from(evaluate1(problem));
|
|
95
|
-
await using evaluation2 = await Evaluation.Initialized.from(evaluate2(problem));
|
|
96
|
-
await using evaluation3 = await Evaluation.Initialized.from(evaluate3(problem));
|
|
97
|
-
for (;;) try {
|
|
98
|
-
let snapshotString = Optimization.Snapshot.from(optimization);
|
|
99
|
-
snapshotString = await opteva(snapshotString, evaluation1);
|
|
100
|
-
let snapshotNumber = await opteva(snapshotString, evaluation2);
|
|
101
|
-
snapshotNumber = await opteva(snapshotNumber, evaluation3);
|
|
102
|
-
return await snapshotNumber.next().then(r => r.value);
|
|
103
|
-
} catch (e) {
|
|
104
|
-
if (e instanceof Rejection) {} else throw e;
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Subtypes
|
|
110
|
-
|
|
111
|
-
```mermaid
|
|
112
|
-
classDiagram
|
|
113
|
-
|
|
114
|
-
Optimization <|.. Optimization.Cache
|
|
115
|
-
Optimization.Raw <|.. Optimization
|
|
116
|
-
class Optimization.Snapshot
|
|
117
|
-
|
|
118
|
-
Evaluation.Raw <|.. Evaluation
|
|
119
|
-
class Evaluation.Initialized
|
|
120
|
-
```
|
|
13
|
+
### [Workflow](./examples/workflow.ts)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Rejection, Opposition, Draft } from './types.ts';
|
|
2
|
+
export interface Evaluation<in out draft, in out nextdraft, in out rejection, in out opposition> extends AsyncDisposable {
|
|
3
|
+
submit(draft: Draft<draft>): Promise<Rejection<rejection> | Draft<nextdraft>>;
|
|
4
|
+
oppose(opposition: Opposition<opposition>): Promise<Rejection<rejection> | Draft<nextdraft>>;
|
|
5
|
+
}
|
|
6
|
+
export declare namespace Evaluation {
|
|
7
|
+
/**
|
|
8
|
+
* @param evagen Ownership transferred.
|
|
9
|
+
*/
|
|
10
|
+
function from<draft, nextdraft, rejection, opposition>(evagen: Evaluation.Generator<draft, nextdraft, rejection, opposition>): Promise<Evaluation<draft, nextdraft, rejection, opposition>>;
|
|
11
|
+
/**
|
|
12
|
+
* First yield must be void.
|
|
13
|
+
*/
|
|
14
|
+
type Generator<draft, nextdraft, rejection, opposition> = AsyncGenerator<Rejection<rejection> | Draft<nextdraft> | void, never, Draft<draft> | Opposition<opposition>>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Rejection, Draft } from "./types.js";
|
|
2
|
+
export var Evaluation;
|
|
3
|
+
(function (Evaluation) {
|
|
4
|
+
/**
|
|
5
|
+
* @param evagen Ownership transferred.
|
|
6
|
+
*/
|
|
7
|
+
async function from(evagen) {
|
|
8
|
+
const first = await evagen.next().then(r => r.value);
|
|
9
|
+
if (first instanceof Rejection)
|
|
10
|
+
throw new Error();
|
|
11
|
+
if (first instanceof Draft)
|
|
12
|
+
throw new Error();
|
|
13
|
+
return {
|
|
14
|
+
async submit(draft) {
|
|
15
|
+
const output = await evagen.next(draft).then(r => r.value);
|
|
16
|
+
if (output instanceof Rejection || output instanceof Draft)
|
|
17
|
+
return output;
|
|
18
|
+
else
|
|
19
|
+
throw new Error();
|
|
20
|
+
},
|
|
21
|
+
async oppose(opposition) {
|
|
22
|
+
const output = await evagen.next(opposition).then(r => r.value);
|
|
23
|
+
if (output instanceof Rejection || output instanceof Draft)
|
|
24
|
+
return output;
|
|
25
|
+
else
|
|
26
|
+
throw new Error();
|
|
27
|
+
},
|
|
28
|
+
async [Symbol.asyncDispose]() {
|
|
29
|
+
await evagen[Symbol.asyncDispose]?.();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
Evaluation.from = from;
|
|
34
|
+
})(Evaluation || (Evaluation = {}));
|
|
35
|
+
//# sourceMappingURL=evaluation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluation.js","sourceRoot":"","sources":["../src/evaluation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,KAAK,EAAE,MAAM,YAAY,CAAC;AAU1D,MAAM,KAAW,UAAU,CAqC1B;AArCD,WAAiB,UAAU;IAEvB;;OAEG;IACI,KAAK,UAAU,IAAI,CACtB,MAAqE;QAErE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,KAAK,YAAY,SAAS;YAAE,MAAM,IAAI,KAAK,EAAE,CAAC;QAClD,IAAI,KAAK,YAAY,KAAK;YAAE,MAAM,IAAI,KAAK,EAAE,CAAC;QAC9C,OAAO;YACH,KAAK,CAAC,MAAM,CAAC,KAAmB;gBAC5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC3D,IAAI,MAAM,YAAY,SAAS,IAAI,MAAM,YAAY,KAAK;oBAAE,OAAO,MAAM,CAAC;;oBACrE,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,CAAC;YAED,KAAK,CAAC,MAAM,CAAC,UAAkC;gBAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAChE,IAAI,MAAM,YAAY,SAAS,IAAI,MAAM,YAAY,KAAK;oBAAE,OAAO,MAAM,CAAC;;oBACrE,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,CAAC;YAED,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;gBACvB,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;YAC1C,CAAC;SAC0D,CAAC;IACpE,CAAC;IAvBqB,eAAI,OAuBzB,CAAA;AASL,CAAC,EArCgB,UAAU,KAAV,UAAU,QAqC1B"}
|
package/build/exports.d.ts
CHANGED
package/build/exports.js
CHANGED
package/build/exports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,
|
|
1
|
+
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
package/build/opteva.d.ts
CHANGED
|
@@ -1,75 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
next(...values: [] | [never]): Promise<IteratorYieldResult<Awaited<draft>>>;
|
|
4
|
-
throw(e: Rejection): Promise<IteratorYieldResult<Awaited<draft> | Opposition>>;
|
|
5
|
-
}
|
|
6
|
-
export declare namespace Optimization {
|
|
7
|
-
interface Raw<draft> extends AsyncGenerator<Awaited<draft> | Opposition, never, never> {
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* @param raw0 Ownership transferred.
|
|
11
|
-
*/
|
|
12
|
-
function ensure<draft>(raw0: Optimization.Raw<draft>): Optimization<draft>;
|
|
13
|
-
interface Cache<draft> extends AsyncGenerator<Awaited<draft> | Opposition, never, void> {
|
|
14
|
-
next(...values: [] | [void]): Promise<IteratorYieldResult<Awaited<draft>>>;
|
|
15
|
-
throw(e: Rejection): Promise<IteratorYieldResult<Awaited<draft> | Opposition>>;
|
|
16
|
-
}
|
|
17
|
-
namespace Cache {
|
|
18
|
-
interface Raw<draft> extends AsyncGenerator<Awaited<draft> | Opposition, never, void> {
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* @param raw0 Ownership transferred.
|
|
22
|
-
*/
|
|
23
|
-
function ensure<draft>(raw0: Optimization.Cache.Raw<draft>): Optimization.Cache<draft>;
|
|
24
|
-
/**
|
|
25
|
-
* @param raw0 Ownership transferred.
|
|
26
|
-
*/
|
|
27
|
-
function from<draft>(raw0: Optimization.Raw<draft>): Optimization.Cache<draft>;
|
|
28
|
-
}
|
|
29
|
-
interface Snapshot<draft> extends AsyncGenerator<Awaited<draft> | Opposition, never, void> {
|
|
30
|
-
next(...values: [] | [void]): Promise<IteratorYieldResult<Awaited<draft>>>;
|
|
31
|
-
/**
|
|
32
|
-
* @throws {@link Rejection}
|
|
33
|
-
*/
|
|
34
|
-
throw(e: Rejection): Promise<IteratorYieldResult<Opposition>>;
|
|
35
|
-
}
|
|
36
|
-
namespace Snapshot {
|
|
37
|
-
/**
|
|
38
|
-
* @param opt Ownership NOT transferred.
|
|
39
|
-
*/
|
|
40
|
-
function from<draft>(opt: Optimization.Cache<draft>): Optimization.Snapshot<draft>;
|
|
41
|
-
/**
|
|
42
|
-
* @param opt Ownership NOT transferred.
|
|
43
|
-
*/
|
|
44
|
-
function recover<input, output>(opt: Optimization.Snapshot<input>, draft: Awaited<output>): Optimization.Snapshot<output>;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
export interface Evaluation<input, output = input> extends AsyncGenerator<Awaited<output> | Rejection, never, input> {
|
|
48
|
-
next(...values: []): Promise<IteratorYieldResult<Evaluation.FirstYield>>;
|
|
49
|
-
next(...values: [input]): Promise<IteratorYieldResult<Awaited<output> | Rejection>>;
|
|
50
|
-
throw(e: Opposition): Promise<IteratorYieldResult<Awaited<output> | Rejection>>;
|
|
51
|
-
}
|
|
52
|
-
export declare namespace Evaluation {
|
|
53
|
-
interface Raw<input, output = input> extends AsyncGenerator<Awaited<output> | Rejection | FirstYield, never, input> {
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* @param raw0 Ownership transferred.
|
|
57
|
-
*/
|
|
58
|
-
function ensure<input, output = input>(raw0: Evaluation.Raw<input, output>): Evaluation<input, output>;
|
|
59
|
-
class FirstYield {
|
|
60
|
-
}
|
|
61
|
-
interface Initialized<input, output = input> extends AsyncGenerator<Awaited<output> | Rejection, never, input> {
|
|
62
|
-
next(...values: [input]): Promise<IteratorResult<Awaited<output> | Rejection, never>>;
|
|
63
|
-
throw(e: Opposition): Promise<IteratorResult<Awaited<output> | Rejection, never>>;
|
|
64
|
-
}
|
|
65
|
-
namespace Initialized {
|
|
66
|
-
/**
|
|
67
|
-
* @param raw0 Ownership transferred.
|
|
68
|
-
*/
|
|
69
|
-
function from<input, output = input>(raw0: Evaluation.Raw<input, output>): Promise<Evaluation.Initialized<input, output>>;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
1
|
+
import { Optimization } from './optimization.ts';
|
|
2
|
+
import { Evaluation } from './evaluation.ts';
|
|
72
3
|
/**
|
|
73
4
|
* @throws {@link Rejection}
|
|
74
5
|
*/
|
|
75
|
-
export declare function opteva<
|
|
6
|
+
export declare function opteva<draft, nextdraft, rejection, opposition>(opt: Optimization.View<draft, rejection, opposition> | Optimization.Snapshot<draft, rejection, opposition>, eva: Evaluation<draft, nextdraft, rejection, opposition>): Promise<Optimization.Snapshot<nextdraft, rejection, opposition>>;
|
package/build/opteva.js
CHANGED
|
@@ -1,298 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
-
var dispose, inner;
|
|
5
|
-
if (async) {
|
|
6
|
-
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
-
dispose = value[Symbol.asyncDispose];
|
|
8
|
-
}
|
|
9
|
-
if (dispose === void 0) {
|
|
10
|
-
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
-
dispose = value[Symbol.dispose];
|
|
12
|
-
if (async) inner = dispose;
|
|
13
|
-
}
|
|
14
|
-
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
-
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
-
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
-
}
|
|
18
|
-
else if (async) {
|
|
19
|
-
env.stack.push({ async: true });
|
|
20
|
-
}
|
|
21
|
-
return value;
|
|
22
|
-
};
|
|
23
|
-
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
-
return function (env) {
|
|
25
|
-
function fail(e) {
|
|
26
|
-
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
-
env.hasError = true;
|
|
28
|
-
}
|
|
29
|
-
var r, s = 0;
|
|
30
|
-
function next() {
|
|
31
|
-
while (r = env.stack.pop()) {
|
|
32
|
-
try {
|
|
33
|
-
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
-
if (r.dispose) {
|
|
35
|
-
var result = r.dispose.call(r.value);
|
|
36
|
-
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
-
}
|
|
38
|
-
else s |= 1;
|
|
39
|
-
}
|
|
40
|
-
catch (e) {
|
|
41
|
-
fail(e);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
-
if (env.hasError) throw env.error;
|
|
46
|
-
}
|
|
47
|
-
return next();
|
|
48
|
-
};
|
|
49
|
-
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
-
var e = new Error(message);
|
|
51
|
-
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
-
});
|
|
53
|
-
import { Rejection, Opposition } from "./exceptions.js";
|
|
54
|
-
export var Optimization;
|
|
55
|
-
(function (Optimization) {
|
|
56
|
-
/**
|
|
57
|
-
* @param raw0 Ownership transferred.
|
|
58
|
-
*/
|
|
59
|
-
function ensure(raw0) {
|
|
60
|
-
return {
|
|
61
|
-
async next(...values) {
|
|
62
|
-
const result = await raw0.next(...values);
|
|
63
|
-
if (result.done)
|
|
64
|
-
throw new Error(undefined, { cause: result });
|
|
65
|
-
const output = result.value;
|
|
66
|
-
if (output instanceof Opposition)
|
|
67
|
-
throw new Error(undefined, { cause: output });
|
|
68
|
-
return { value: output, done: false };
|
|
69
|
-
},
|
|
70
|
-
async throw(e) {
|
|
71
|
-
const result = await raw0.throw(e);
|
|
72
|
-
if (result.done)
|
|
73
|
-
throw new Error();
|
|
74
|
-
return { value: result.value, done: false };
|
|
75
|
-
},
|
|
76
|
-
return(value) {
|
|
77
|
-
return raw0.return(value);
|
|
78
|
-
},
|
|
79
|
-
[Symbol.asyncIterator]() {
|
|
80
|
-
return this;
|
|
81
|
-
},
|
|
82
|
-
[Symbol.asyncDispose]() {
|
|
83
|
-
return raw0[Symbol.asyncDispose]?.();
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
Optimization.ensure = ensure;
|
|
88
|
-
let Cache;
|
|
89
|
-
(function (Cache) {
|
|
90
|
-
/**
|
|
91
|
-
* @param raw0 Ownership transferred.
|
|
92
|
-
*/
|
|
93
|
-
function ensure(raw0) {
|
|
94
|
-
return {
|
|
95
|
-
async next(...values) {
|
|
96
|
-
const result = await raw0.next(...values);
|
|
97
|
-
if (result.done)
|
|
98
|
-
throw new Error(undefined, { cause: result });
|
|
99
|
-
const output = result.value;
|
|
100
|
-
if (output instanceof Opposition)
|
|
101
|
-
throw new Error(undefined, { cause: output });
|
|
102
|
-
return { value: output, done: false };
|
|
103
|
-
},
|
|
104
|
-
async throw(e) {
|
|
105
|
-
const result = await raw0.throw(e);
|
|
106
|
-
if (result.done)
|
|
107
|
-
throw new Error(undefined, { cause: result });
|
|
108
|
-
return { value: result.value, done: false };
|
|
109
|
-
},
|
|
110
|
-
return(value) {
|
|
111
|
-
return raw0.return(value);
|
|
112
|
-
},
|
|
113
|
-
[Symbol.asyncIterator]() {
|
|
114
|
-
return this;
|
|
115
|
-
},
|
|
116
|
-
[Symbol.asyncDispose]() {
|
|
117
|
-
return raw0[Symbol.asyncDispose]?.();
|
|
118
|
-
},
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
Cache.ensure = ensure;
|
|
122
|
-
/**
|
|
123
|
-
* @param raw0 Ownership transferred.
|
|
124
|
-
*/
|
|
125
|
-
function from(raw0) {
|
|
126
|
-
/**
|
|
127
|
-
* @param raw0 Ownership transferred.
|
|
128
|
-
*/
|
|
129
|
-
async function* from(raw0) {
|
|
130
|
-
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
131
|
-
try {
|
|
132
|
-
const raw = __addDisposableResource(env_1, Optimization.ensure(raw0), true);
|
|
133
|
-
let draft = await raw.next().then(r => r.value);
|
|
134
|
-
let output = draft;
|
|
135
|
-
for (;;)
|
|
136
|
-
try {
|
|
137
|
-
yield output;
|
|
138
|
-
output = draft;
|
|
139
|
-
}
|
|
140
|
-
catch (e) {
|
|
141
|
-
if (e instanceof Rejection) { }
|
|
142
|
-
else
|
|
143
|
-
throw e;
|
|
144
|
-
output = await raw.throw(e).then(r => r.value);
|
|
145
|
-
if (output instanceof Opposition) { }
|
|
146
|
-
else
|
|
147
|
-
draft = output;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
catch (e_1) {
|
|
151
|
-
env_1.error = e_1;
|
|
152
|
-
env_1.hasError = true;
|
|
153
|
-
}
|
|
154
|
-
finally {
|
|
155
|
-
const result_1 = __disposeResources(env_1);
|
|
156
|
-
if (result_1)
|
|
157
|
-
await result_1;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return Optimization.Cache.ensure(from(Optimization.ensure(raw0)));
|
|
161
|
-
}
|
|
162
|
-
Cache.from = from;
|
|
163
|
-
})(Cache = Optimization.Cache || (Optimization.Cache = {}));
|
|
164
|
-
let Snapshot;
|
|
165
|
-
(function (Snapshot) {
|
|
166
|
-
/**
|
|
167
|
-
* @param opt Ownership NOT transferred.
|
|
168
|
-
*/
|
|
169
|
-
function from(opt) {
|
|
170
|
-
return {
|
|
171
|
-
next(...values) {
|
|
172
|
-
return opt.next(...values);
|
|
173
|
-
},
|
|
174
|
-
async throw(e) {
|
|
175
|
-
const output = await opt.throw(e).then(r => r.value);
|
|
176
|
-
if (output instanceof Opposition)
|
|
177
|
-
return { value: output, done: false };
|
|
178
|
-
throw e;
|
|
179
|
-
},
|
|
180
|
-
return(value) {
|
|
181
|
-
return opt.return(value);
|
|
182
|
-
},
|
|
183
|
-
[Symbol.asyncIterator]() {
|
|
184
|
-
return this;
|
|
185
|
-
},
|
|
186
|
-
async [Symbol.asyncDispose]() { },
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
Snapshot.from = from;
|
|
190
|
-
/**
|
|
191
|
-
* @param opt Ownership NOT transferred.
|
|
192
|
-
*/
|
|
193
|
-
function recover(opt, draft) {
|
|
194
|
-
return {
|
|
195
|
-
async next(...values) {
|
|
196
|
-
return { value: draft, done: false };
|
|
197
|
-
},
|
|
198
|
-
throw(e) {
|
|
199
|
-
return opt.throw(e);
|
|
200
|
-
},
|
|
201
|
-
async return(value) {
|
|
202
|
-
await opt.return(undefined);
|
|
203
|
-
return { value: await value, done: true };
|
|
204
|
-
},
|
|
205
|
-
[Symbol.asyncIterator]() {
|
|
206
|
-
return this;
|
|
207
|
-
},
|
|
208
|
-
async [Symbol.asyncDispose]() { },
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
Snapshot.recover = recover;
|
|
212
|
-
})(Snapshot = Optimization.Snapshot || (Optimization.Snapshot = {}));
|
|
213
|
-
})(Optimization || (Optimization = {}));
|
|
214
|
-
export var Evaluation;
|
|
215
|
-
(function (Evaluation) {
|
|
216
|
-
/**
|
|
217
|
-
* @param raw0 Ownership transferred.
|
|
218
|
-
*/
|
|
219
|
-
function ensure(raw0) {
|
|
220
|
-
async function next(...values) {
|
|
221
|
-
if (values.length) {
|
|
222
|
-
const result = await raw0.next(...values);
|
|
223
|
-
if (result.done)
|
|
224
|
-
throw new Error(undefined, { cause: result });
|
|
225
|
-
const output = result.value;
|
|
226
|
-
if (output instanceof Evaluation.FirstYield)
|
|
227
|
-
throw new Error(undefined, { cause: output });
|
|
228
|
-
return { value: result.value, done: false };
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
const result = await raw0.next();
|
|
232
|
-
if (result.done)
|
|
233
|
-
throw new Error(undefined, { cause: result });
|
|
234
|
-
const output = result.value;
|
|
235
|
-
if (output instanceof Evaluation.FirstYield)
|
|
236
|
-
return { value: output, done: false };
|
|
237
|
-
throw new Error(undefined, { cause: output });
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
return {
|
|
241
|
-
next,
|
|
242
|
-
async throw(e) {
|
|
243
|
-
const result = await raw0.throw(e);
|
|
244
|
-
if (result.done)
|
|
245
|
-
throw new Error(undefined, { cause: result });
|
|
246
|
-
const output = result.value;
|
|
247
|
-
if (output instanceof Evaluation.FirstYield)
|
|
248
|
-
throw new Error(undefined, { cause: output });
|
|
249
|
-
return { value: output, done: false };
|
|
250
|
-
},
|
|
251
|
-
async return(value) {
|
|
252
|
-
const result = await raw0.return(value);
|
|
253
|
-
if (result.done)
|
|
254
|
-
return { value: await value, done: true };
|
|
255
|
-
const output = result.value;
|
|
256
|
-
if (output instanceof Evaluation.FirstYield)
|
|
257
|
-
throw new Error(undefined, { cause: output });
|
|
258
|
-
return { value: output, done: false };
|
|
259
|
-
},
|
|
260
|
-
[Symbol.asyncIterator]() {
|
|
261
|
-
return this;
|
|
262
|
-
},
|
|
263
|
-
[Symbol.asyncDispose]() {
|
|
264
|
-
return raw0[Symbol.asyncDispose]?.();
|
|
265
|
-
},
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
Evaluation.ensure = ensure;
|
|
269
|
-
class FirstYield {
|
|
270
|
-
}
|
|
271
|
-
Evaluation.FirstYield = FirstYield;
|
|
272
|
-
let Initialized;
|
|
273
|
-
(function (Initialized) {
|
|
274
|
-
/**
|
|
275
|
-
* @param raw0 Ownership transferred.
|
|
276
|
-
*/
|
|
277
|
-
async function from(raw0) {
|
|
278
|
-
const eva = Evaluation.ensure(raw0);
|
|
279
|
-
await eva.next().then(r => r.value);
|
|
280
|
-
return eva;
|
|
281
|
-
}
|
|
282
|
-
Initialized.from = from;
|
|
283
|
-
})(Initialized = Evaluation.Initialized || (Evaluation.Initialized = {}));
|
|
284
|
-
})(Evaluation || (Evaluation = {}));
|
|
1
|
+
import { Draft, Rejection, Opposition } from "./types.js";
|
|
2
|
+
import { Optimization } from "./optimization.js";
|
|
285
3
|
/**
|
|
286
4
|
* @throws {@link Rejection}
|
|
287
5
|
*/
|
|
288
6
|
export async function opteva(opt, eva) {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
7
|
+
let draft = await opt.repeat();
|
|
8
|
+
let evaoutput = await eva.submit(draft);
|
|
9
|
+
for (; evaoutput instanceof Rejection;) {
|
|
10
|
+
const rejection = evaoutput;
|
|
11
|
+
const optoutput = await opt.reject(rejection);
|
|
12
|
+
if (optoutput instanceof Opposition) {
|
|
13
|
+
evaoutput = await eva.oppose(optoutput);
|
|
14
|
+
}
|
|
15
|
+
else if (optoutput instanceof Draft) {
|
|
16
|
+
throw rejection;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
let nextoutput = evaoutput;
|
|
20
|
+
async function* nextgen() {
|
|
21
|
+
for (;;) {
|
|
22
|
+
const rejection = yield nextoutput;
|
|
23
|
+
const output = await opt.reject(rejection);
|
|
24
|
+
if (output instanceof Draft)
|
|
25
|
+
throw rejection;
|
|
26
|
+
else if (output instanceof Opposition)
|
|
27
|
+
nextoutput = output;
|
|
28
|
+
else
|
|
29
|
+
throw new Error();
|
|
30
|
+
}
|
|
296
31
|
}
|
|
32
|
+
return Optimization.from(nextgen());
|
|
297
33
|
}
|
|
298
34
|
//# sourceMappingURL=opteva.js.map
|
package/build/opteva.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opteva.js","sourceRoot":"","sources":["../src/opteva.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opteva.js","sourceRoot":"","sources":["../src/opteva.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMjD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CACxB,GAA0G,EAC1G,GAAwD;IAExD,IAAI,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;IAC/B,IAAI,SAAS,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACvC,OAAO,SAAS,YAAY,SAAS,GAAG,CAAC;QACrC,MAAM,SAAS,GAAG,SAAS,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,SAAS,YAAY,UAAU,EAAE,CAAC;YAClC,SAAS,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC;YACpC,MAAM,SAAS,CAAC;QACpB,CAAC;IACL,CAAC;IAED,IAAI,UAAU,GAA8C,SAAS,CAAC;IACtE,KAAK,SAAU,CAAC,CAAA,OAAO;QACnB,SAAS,CAAC;YACN,MAAM,SAAS,GAAyB,MAAM,UAAU,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,MAAM,YAAY,KAAK;gBACvB,MAAM,SAAS,CAAC;iBACf,IAAI,MAAM,YAAY,UAAU;gBACjC,UAAU,GAAG,MAAM,CAAC;;gBACnB,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3B,CAAC;IACL,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAA4D,CAAC;AACnG,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Draft, Rejection, Opposition } from './types.ts';
|
|
2
|
+
export interface Optimization<in out draft, in out rejection, in out opposition> extends AsyncDisposable, Optimization.View<draft, rejection, opposition> {
|
|
3
|
+
}
|
|
4
|
+
export declare namespace Optimization {
|
|
5
|
+
/**
|
|
6
|
+
* First yield must be a draft.
|
|
7
|
+
*/
|
|
8
|
+
type Generator<draft, rejection, opposition> = AsyncGenerator<Draft<draft> | Opposition<opposition>, never, Rejection<rejection>>;
|
|
9
|
+
/**
|
|
10
|
+
* @param optgen Ownership transferred.
|
|
11
|
+
*/
|
|
12
|
+
function from<draft, rejection, opposition>(optgen: Optimization.Generator<draft, rejection, opposition>): Optimization<draft, rejection, opposition>;
|
|
13
|
+
interface View<in out draft, in out rejection, in out opposition> {
|
|
14
|
+
repeat(): Promise<Draft<draft>>;
|
|
15
|
+
reject(rejection: Rejection<rejection>): Promise<Draft<draft> | Opposition<opposition>>;
|
|
16
|
+
}
|
|
17
|
+
namespace View {
|
|
18
|
+
function map<draft, nextdraft, rejection, opposition>(optview: Optimization.View<draft, rejection, opposition>, f: (draft: draft) => Promise<nextdraft>): Optimization.View<nextdraft, rejection, opposition>;
|
|
19
|
+
}
|
|
20
|
+
interface Snapshot<in out draft, in out rejection, in out opposition> extends Optimization.View<draft, rejection, opposition> {
|
|
21
|
+
repeat(): Promise<Draft<draft>>;
|
|
22
|
+
/**
|
|
23
|
+
* @throws {@link Rejection}
|
|
24
|
+
*/
|
|
25
|
+
reject(rejection: Rejection<rejection>): Promise<Opposition<opposition>>;
|
|
26
|
+
}
|
|
27
|
+
namespace Snapshot {
|
|
28
|
+
function map<draft, nextdraft, rejection, opposition>(opt: Optimization.Snapshot<draft, rejection, opposition> | Optimization.View<draft, rejection, opposition>, f: (draft: draft) => Promise<nextdraft>): Optimization.Snapshot<nextdraft, rejection, opposition>;
|
|
29
|
+
}
|
|
30
|
+
}
|