@misterscan/sesi 1.1.1 → 1.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/README.md +44 -19
- package/bin/sesi.js +35 -34
- package/dist/ai-runtime.d.ts +5 -0
- package/dist/ai-runtime.d.ts.map +1 -1
- package/dist/ai-runtime.js +157 -7
- package/dist/ai-runtime.js.map +1 -1
- package/dist/builtins.d.ts +1 -1
- package/dist/builtins.d.ts.map +1 -1
- package/dist/builtins.js +114 -1
- package/dist/builtins.js.map +1 -1
- package/dist/interpreter.d.ts +6 -1
- package/dist/interpreter.d.ts.map +1 -1
- package/dist/interpreter.js +210 -36
- package/dist/interpreter.js.map +1 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +2 -0
- package/dist/parser.js.map +1 -1
- package/dist/sesi.bundled.js +55012 -0
- package/dist/types.d.ts +9 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/docs/ARCHITECTURE.md +9 -9
- package/docs/BUILTINS.md +87 -8
- package/docs/DISTRIBUTED_SYSTEMS.md +1 -1
- package/docs/IMAGE_GENERATION.md +82 -1
- package/docs/IMPLEMENTATION_SUMMARY.md +544 -533
- package/docs/QUICKSTART.md +52 -33
- package/docs/README.md +21 -39
- package/docs/ROADMAP.md +10 -11
- package/docs/SPECIFICATION.md +37 -14
- package/docs/SYSTEMS_REASONING.md +35 -11
- package/docs/bakery_logo.png +0 -0
- package/docs/coffee_mug.png +0 -0
- package/docs/desk_lamp.png +0 -0
- package/docs/logo.png +0 -0
- package/docs/notebook.png +0 -0
- package/docs/sesi_ai_chronicles.md +209 -0
- package/examples/16_modules.sesi +28 -0
- package/examples/17_http_client.sesi +29 -0
- package/examples/18_parallel_requests.sesi +37 -0
- package/main/chatbot.sesi +36 -0
- package/main/conversational_classifier_weights.json +45 -0
- package/main/conversational_sentences.json +304 -0
- package/main/epochs.sesi +94 -0
- package/main/gpu_orchestrator.sesi +36 -0
- package/main/hardware_diagnostics.sesi +118 -0
- package/main/inference.sesi +54 -0
- package/main/native_chatbot.sesi +180 -0
- package/main/native_synthesizer.sesi +83 -0
- package/main/nn_personas_trainer.sesi +302 -0
- package/main/nn_responses_trainer.sesi +269 -0
- package/main/nn_sentences_trainer.sesi +330 -0
- package/main/personas.json +124 -0
- package/main/personas_classifier_weights.json +45 -0
- package/main/playground.sesi +3 -1
- package/main/predictive_typing.sesi +127 -0
- package/main/query_brain.sesi +45 -0
- package/main/response_classifier_weights.json +45 -0
- package/main/retro_chat.html +239 -0
- package/main/retro_chat_generator.sesi +745 -0
- package/main/sesi_ai.sesi +158 -0
- package/main/sesi_db_chatbot.sesi +261 -0
- package/main/terminal_chat.py +385 -0
- package/main/tests/temp_math_mod.sesi +3 -0
- package/main/tests/test_image_input.sesi +40 -0
- package/main/tests/test_v2_features.sesi +48 -0
- package/main/unified_sesi_ai.sesi +334 -0
- package/main/varied_responses.json +304 -0
- package/package.json +12 -5
- package/main/atm_deposit.sesi +0 -37
- package/main/atm_withdraw.sesi +0 -37
- package/main/data.txt +0 -1
- package/main/math_aggregator.sesi +0 -15
- package/main/math_generator.sesi +0 -7
- package/main/math_processor.sesi +0 -23
- package/main/tax_calculator.sesi +0 -15
- package/main/vault.sesi +0 -15
package/README.md
CHANGED
|
@@ -15,32 +15,51 @@
|
|
|
15
15
|
<img alt="Framework" src="https://img.shields.io/badge/Node.js-Engine-success?logo=node.js">
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
<p align="center">
|
|
19
|
+
<strong>Sesi</strong> is a high-performance <strong>Systems Language</strong> designed for building resilient, stateful applications. It provides first-class primitives for process management, filesystem orchestration, and integrated reasoning, enabling developers to build complex logic with a fraction of the boilerplate required by traditional languages.
|
|
20
|
+
</p>
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
<p align="center">
|
|
23
|
+
<a href="https://code-with-sesi.netlify.app/">Homepage</a>
|
|
24
|
+
</p>
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
## Installation
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
You can install Sesi in three ways:
|
|
25
29
|
|
|
30
|
+
### 1. Global Installation via npm (Recommended)
|
|
31
|
+
If you have Node.js installed, download Sesi directly from the npm registry:
|
|
26
32
|
```bash
|
|
27
|
-
|
|
28
|
-
cd sesi-programming-lang
|
|
33
|
+
npm install -g sesi
|
|
29
34
|
```
|
|
30
|
-
You'll need a [Gemini API Key](https://aistudio.google.com/app/apikey). Create a `.env` file referencing your key:
|
|
31
35
|
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
### 2. Standalone Executables
|
|
37
|
+
Don't want to install Node.js? Download the standalone executables bundled for Windows, Mac, and Linux directly from our [Downloads page](https://code-with-sesi.netlify.app/downloads). Drop the executable in your system PATH and you're good to go!
|
|
38
|
+
|
|
39
|
+
For macOS users, Sesi also supports a native PKG installer flow when building from source:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm run build:exe
|
|
43
|
+
npm run build:mac:pkg
|
|
34
44
|
```
|
|
35
45
|
|
|
36
|
-
|
|
46
|
+
This generates installer packages in `releases/` (for available architectures) that install `sesi` to `/usr/local/bin`.
|
|
37
47
|
|
|
48
|
+
### 3. Build from Source (For contributors)
|
|
38
49
|
```bash
|
|
39
|
-
|
|
50
|
+
git clone https://github.com/Misterscan/Sesi.git
|
|
51
|
+
cd Sesi
|
|
40
52
|
npm install
|
|
53
|
+
npm run build
|
|
54
|
+
npm install -g . # Unlock the `sesi` command locally
|
|
55
|
+
```
|
|
41
56
|
|
|
42
|
-
|
|
43
|
-
|
|
57
|
+
## Quick Start
|
|
58
|
+
|
|
59
|
+
You'll need a [Gemini API Key](https://aistudio.google.com/app/apikey) for the reasoning features. Create a `.env` file referencing your key where you run your scripts:
|
|
60
|
+
|
|
61
|
+
```env
|
|
62
|
+
GEMINI_API_KEY="AIzaSy..."
|
|
44
63
|
```
|
|
45
64
|
|
|
46
65
|
Then run any program directly:
|
|
@@ -109,7 +128,7 @@ The root-level `SKILLS.md` file is a workspace context file for AI agents. It re
|
|
|
109
128
|
## Project Structure
|
|
110
129
|
|
|
111
130
|
```
|
|
112
|
-
|
|
131
|
+
Sesi/
|
|
113
132
|
├── SKILLS.md # AI-agent workspace context and repo guardrails
|
|
114
133
|
├── index.html # Sesi-generated landing page
|
|
115
134
|
├── eslint.config.mjs # ESLint configuration
|
|
@@ -130,7 +149,7 @@ sesi-programming-lang/
|
|
|
130
149
|
│ └── index.ts # Main entry point
|
|
131
150
|
├── bin/
|
|
132
151
|
│ └── sesi.js # CLI executable
|
|
133
|
-
├── examples/ #
|
|
152
|
+
├── examples/ # 18 sample programs demonstrating all features
|
|
134
153
|
├── main/ # Main entry and specialized tests
|
|
135
154
|
│ ├── playground.sesi # Main playground script
|
|
136
155
|
│ ├── start.sesi # Beginner script
|
|
@@ -140,7 +159,7 @@ sesi-programming-lang/
|
|
|
140
159
|
└── docs/ # Documentation (ARCHITECTURE, BUILTINS, SPECIFICATION, etc.)
|
|
141
160
|
```
|
|
142
161
|
|
|
143
|
-
## Version 1.
|
|
162
|
+
## Version 1.2 Features (In Progress)
|
|
144
163
|
|
|
145
164
|
### Core Language ✅
|
|
146
165
|
|
|
@@ -149,6 +168,11 @@ sesi-programming-lang/
|
|
|
149
168
|
- **Control Flow**: `if/else`, `while`, `for`, and `try/catch`.
|
|
150
169
|
- **Collections**: Robust Arrays and Objects.
|
|
151
170
|
- **Error Handling**: Structured `try/catch` for both runtime and Reasoning-level errors.
|
|
171
|
+
- **Local Module Imports/Exports**: Import custom local `.sesi` modules cleanly using relative import/export syntax!
|
|
172
|
+
- **Standard Library Modules**: Native support for imported standard libraries, including:
|
|
173
|
+
- `std/math` (providing `PI`, `E`, `sqrt`, `pow`, `sin`, `cos`, etc.)
|
|
174
|
+
- `std/time` (providing `sleep` and `now`)
|
|
175
|
+
- `std/json` (providing JSON serialization/deserialization)
|
|
152
176
|
|
|
153
177
|
### Reasoning-Native Features ✅
|
|
154
178
|
|
|
@@ -159,7 +183,10 @@ sesi-programming-lang/
|
|
|
159
183
|
- `tool_call()` for function calling
|
|
160
184
|
- Basic memory for multi-turn reasoning
|
|
161
185
|
- `read_file()`, `write_file()`, `to_json()`, `write_image()`, and `list_dir()` for local file I/O
|
|
162
|
-
- **Native
|
|
186
|
+
- **Native Concurrency**: `spawn()` and `exec()` for concurrent process management, and `multi_req(array<function>)` for physical parallel request execution.
|
|
187
|
+
- **Logic Caching**: High-efficiency Sesi Logic Caching (`.sesi_cache.json`) for local call caching.
|
|
188
|
+
- **Thinking Scale**: Scaled Gemini reasoning configurations using the `thinking` parameters.
|
|
189
|
+
- **HTTP Client**: Built-in, native HTTP client support using `web_get(url)` and `web_send(url, body, headers)` with zero external dependencies.
|
|
163
190
|
- **Async Polling**: Native looping to auto-resume generation when hitting `MAX_TOKENS` limit
|
|
164
191
|
- **Utility Builtins**: `time()` and `random()` for robust coordination
|
|
165
192
|
|
|
@@ -174,8 +201,6 @@ sesi-programming-lang/
|
|
|
174
201
|
### V2: Advanced Reasoning
|
|
175
202
|
|
|
176
203
|
- Long-term memory and context management
|
|
177
|
-
- Parallel model calls
|
|
178
|
-
- Advanced error handling with Reasoning fallbacks
|
|
179
204
|
- Custom tool definitions
|
|
180
205
|
- Streaming responses
|
|
181
206
|
|
package/bin/sesi.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
1
2
|
require('@dotenvx/dotenvx').config();
|
|
2
3
|
const { runSesiFile } = require('../dist/index.js');
|
|
3
4
|
const fs = require('fs');
|
|
@@ -7,50 +8,50 @@ const args = process.argv.slice(2);
|
|
|
7
8
|
|
|
8
9
|
if (args.length === 0) {
|
|
9
10
|
console.log(`
|
|
10
|
-
Sesi Programming Language v1.
|
|
11
|
+
Sesi Programming Language v1.2.0
|
|
11
12
|
|
|
12
13
|
Usage:
|
|
13
14
|
sesi <file> Run a Sesi program
|
|
14
|
-
sesi
|
|
15
|
+
sesi -help <query> Ask for help from our Sesi Co-Pilot
|
|
16
|
+
sesi --help <query>
|
|
17
|
+
sesi -h <query>
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
sesi main/start.sesi
|
|
18
|
-
sesi examples/01_hello.sesi
|
|
19
|
-
`);
|
|
20
|
-
process.exit(0);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
if (args[0] === '--help' || args[0] === '-h') {
|
|
24
|
-
console.log(`
|
|
25
|
-
Sesi Programming Language v1.1.1
|
|
26
|
-
|
|
27
|
-
Usage:
|
|
28
|
-
sesi <file> Run a Sesi program
|
|
29
|
-
sesi --help Show this help
|
|
30
|
-
|
|
31
|
-
Options:
|
|
19
|
+
Options:
|
|
32
20
|
--version Show version
|
|
33
|
-
|
|
21
|
+
|
|
34
22
|
Examples:
|
|
35
23
|
sesi main/start.sesi
|
|
36
24
|
sesi examples/01_hello.sesi
|
|
25
|
+
sesi -help "how do I parse a json string?"
|
|
37
26
|
`);
|
|
38
27
|
process.exit(0);
|
|
39
28
|
}
|
|
40
29
|
|
|
41
|
-
if (args[0] === '--
|
|
42
|
-
|
|
30
|
+
if (args[0] === '--help' || args[0] === '-help' || args[0] === '-h') {
|
|
31
|
+
let queryText = args.slice(1).join(' ').trim();
|
|
32
|
+
if (!queryText) {
|
|
33
|
+
queryText = "how do I parse a json string?";
|
|
34
|
+
}
|
|
35
|
+
fs.writeFileSync('query.txt', queryText, 'utf-8');
|
|
36
|
+
|
|
37
|
+
const copilotPath = path.join(__dirname, '../main/sesi_db_chatbot.sesi');
|
|
38
|
+
runSesiFile(copilotPath).catch((error) => {
|
|
39
|
+
console.error('Fatal error in RAG Co-Pilot:', error.message);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
});
|
|
42
|
+
} else if (args[0] === '--version') {
|
|
43
|
+
console.log('Sesi v1.2.0');
|
|
43
44
|
process.exit(0);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
45
|
+
} else {
|
|
46
|
+
const filePath = args[0];
|
|
47
|
+
|
|
48
|
+
if (!fs.existsSync(filePath)) {
|
|
49
|
+
console.error(`Error: File not found: ${filePath}`);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
runSesiFile(filePath).catch((error) => {
|
|
54
|
+
console.error('Fatal error:', error.message);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
});
|
|
57
|
+
}
|
package/dist/ai-runtime.d.ts
CHANGED
|
@@ -4,6 +4,11 @@ export declare class AIRuntime {
|
|
|
4
4
|
private conversationHistory;
|
|
5
5
|
constructor();
|
|
6
6
|
private get client();
|
|
7
|
+
private getCacheFile;
|
|
8
|
+
private readCache;
|
|
9
|
+
private writeCache;
|
|
10
|
+
private computeCacheHash;
|
|
11
|
+
private resolveImageParts;
|
|
7
12
|
callModel(request: AIRequest): Promise<AIResponse>;
|
|
8
13
|
parseStructuredOutput(response: string, schema: Record<string, any>): Promise<StructuredOutput>;
|
|
9
14
|
initializeMemory(memoryId: string, initialValue: string): void;
|
package/dist/ai-runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-runtime.d.ts","sourceRoot":"","sources":["../src/ai-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-runtime.d.ts","sourceRoot":"","sources":["../src/ai-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIlE,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,mBAAmB,CAAoC;;IAI/D,OAAO,KAAK,MAAM,GAajB;IAED,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,iBAAiB;IAqBnB,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAwNlD,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IAkC5B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAI9D,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAOvD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMnC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CAGtD;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
package/dist/ai-runtime.js
CHANGED
|
@@ -1,6 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.aiRuntime = exports.AIRuntime = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
4
39
|
class AIRuntime {
|
|
5
40
|
constructor() {
|
|
6
41
|
this._client = null;
|
|
@@ -19,12 +54,101 @@ class AIRuntime {
|
|
|
19
54
|
}
|
|
20
55
|
return this._client;
|
|
21
56
|
}
|
|
57
|
+
getCacheFile() {
|
|
58
|
+
return path.resolve(process.cwd(), '.sesi_cache.json');
|
|
59
|
+
}
|
|
60
|
+
readCache() {
|
|
61
|
+
const file = this.getCacheFile();
|
|
62
|
+
if (fs.existsSync(file)) {
|
|
63
|
+
try {
|
|
64
|
+
return JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return {};
|
|
71
|
+
}
|
|
72
|
+
writeCache(cache) {
|
|
73
|
+
const file = this.getCacheFile();
|
|
74
|
+
try {
|
|
75
|
+
fs.writeFileSync(file, JSON.stringify(cache, null, 2), 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
// Ignore write errors gracefully
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
computeCacheHash(request) {
|
|
82
|
+
const crypto = require('crypto');
|
|
83
|
+
const hash = crypto.createHash('sha256');
|
|
84
|
+
const input = {
|
|
85
|
+
model: request.model,
|
|
86
|
+
prompt: request.prompt,
|
|
87
|
+
temperature: request.temperature,
|
|
88
|
+
maxTokens: request.maxTokens,
|
|
89
|
+
topK: request.topK,
|
|
90
|
+
topP: request.topP,
|
|
91
|
+
ratio: request.ratio,
|
|
92
|
+
size: request.size,
|
|
93
|
+
images: request.images,
|
|
94
|
+
thinkingLevel: request.thinkingLevel,
|
|
95
|
+
};
|
|
96
|
+
hash.update(JSON.stringify(input));
|
|
97
|
+
return hash.digest('hex');
|
|
98
|
+
}
|
|
99
|
+
resolveImageParts(imagePaths) {
|
|
100
|
+
const mimeMap = {
|
|
101
|
+
'.jpg': 'image/jpeg',
|
|
102
|
+
'.jpeg': 'image/jpeg',
|
|
103
|
+
'.png': 'image/png',
|
|
104
|
+
'.gif': 'image/gif',
|
|
105
|
+
'.webp': 'image/webp',
|
|
106
|
+
'.bmp': 'image/bmp',
|
|
107
|
+
};
|
|
108
|
+
const parts = [];
|
|
109
|
+
for (const imgPath of imagePaths) {
|
|
110
|
+
const abs = path.isAbsolute(imgPath) ? imgPath : path.resolve(process.cwd(), imgPath);
|
|
111
|
+
const ext = path.extname(abs).toLowerCase();
|
|
112
|
+
const mimeType = mimeMap[ext] ?? 'image/jpeg';
|
|
113
|
+
const data = fs.readFileSync(abs).toString('base64');
|
|
114
|
+
parts.push({ inlineData: { mimeType, data } });
|
|
115
|
+
}
|
|
116
|
+
return parts;
|
|
117
|
+
}
|
|
22
118
|
async callModel(request) {
|
|
119
|
+
const useCache = request.cache !== false;
|
|
120
|
+
let cacheHash = '';
|
|
121
|
+
if (useCache) {
|
|
122
|
+
cacheHash = this.computeCacheHash(request);
|
|
123
|
+
const cache = this.readCache();
|
|
124
|
+
if (cache[cacheHash]) {
|
|
125
|
+
console.log('⚡ [Sesi Logic Cache] Served from local cache');
|
|
126
|
+
return cache[cacheHash];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
23
129
|
try {
|
|
24
130
|
const client = this.client;
|
|
25
131
|
// Inject current date/time for context
|
|
26
132
|
const timeContext = `[System context: Current date and time is ${new Date().toUTCString()}]\n\n`;
|
|
27
133
|
const fullPrompt = timeContext + request.prompt;
|
|
134
|
+
// Build thinkingConfig if requested
|
|
135
|
+
let thinkingConfig = undefined;
|
|
136
|
+
if (request.thinkingLevel) {
|
|
137
|
+
const thinking = request.thinkingLevel.thinking !== 'no';
|
|
138
|
+
const level = request.thinkingLevel.level || 'low';
|
|
139
|
+
const isGemini3 = request.model.includes('gemini-3');
|
|
140
|
+
if (isGemini3) {
|
|
141
|
+
const isPro = request.model.includes('pro');
|
|
142
|
+
thinkingConfig = {
|
|
143
|
+
thinkingLevel: thinking ? level : (isPro ? 'low' : 'minimal')
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
thinkingConfig = {
|
|
148
|
+
thinkingBudget: thinking ? (level === 'low' ? 1024 : level === 'medium' ? 2048 : 4096) : 0
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
28
152
|
// Handle image generation models dynamically
|
|
29
153
|
if (request.model.includes('image')) {
|
|
30
154
|
const imageConfig = {};
|
|
@@ -46,9 +170,13 @@ class AIRuntime {
|
|
|
46
170
|
configObj.topK = request.topK;
|
|
47
171
|
if (request.topP !== undefined)
|
|
48
172
|
configObj.topP = request.topP;
|
|
173
|
+
if (thinkingConfig)
|
|
174
|
+
configObj.thinkingConfig = thinkingConfig;
|
|
49
175
|
const response = await client.models.generateContent({
|
|
50
176
|
model: request.model,
|
|
51
|
-
contents: request.
|
|
177
|
+
contents: request.images && request.images.length > 0
|
|
178
|
+
? [{ role: 'user', parts: [...this.resolveImageParts(request.images), { text: request.prompt }] }]
|
|
179
|
+
: request.prompt,
|
|
52
180
|
config: configObj
|
|
53
181
|
});
|
|
54
182
|
let base64String = null;
|
|
@@ -63,7 +191,7 @@ class AIRuntime {
|
|
|
63
191
|
if (!base64String) {
|
|
64
192
|
throw new Error("Image generation failed or returned no image output.");
|
|
65
193
|
}
|
|
66
|
-
|
|
194
|
+
const resObj = {
|
|
67
195
|
text: base64String, // Return the base64 string directly
|
|
68
196
|
finishReason: 'STOP',
|
|
69
197
|
usage: {
|
|
@@ -71,6 +199,12 @@ class AIRuntime {
|
|
|
71
199
|
outputTokens: 0,
|
|
72
200
|
},
|
|
73
201
|
};
|
|
202
|
+
if (useCache) {
|
|
203
|
+
const cache = this.readCache();
|
|
204
|
+
cache[cacheHash] = resObj;
|
|
205
|
+
this.writeCache(cache);
|
|
206
|
+
}
|
|
207
|
+
return resObj;
|
|
74
208
|
}
|
|
75
209
|
let accumulatedText = '';
|
|
76
210
|
let currentFinishReason = '';
|
|
@@ -79,9 +213,15 @@ class AIRuntime {
|
|
|
79
213
|
let totalOutputTokens = 0;
|
|
80
214
|
let maxPolls = 10;
|
|
81
215
|
let currentPoll = 0;
|
|
82
|
-
const contents = [
|
|
83
|
-
|
|
84
|
-
|
|
216
|
+
const contents = [];
|
|
217
|
+
// Prepend image parts if provided
|
|
218
|
+
const imageParts = request.images && request.images.length > 0
|
|
219
|
+
? this.resolveImageParts(request.images)
|
|
220
|
+
: [];
|
|
221
|
+
contents.push({
|
|
222
|
+
role: 'user',
|
|
223
|
+
parts: [...imageParts, { text: fullPrompt }],
|
|
224
|
+
});
|
|
85
225
|
while (!isComplete && currentPoll < maxPolls) {
|
|
86
226
|
const genConfig = {
|
|
87
227
|
temperature: request.temperature ?? 0.3,
|
|
@@ -92,6 +232,9 @@ class AIRuntime {
|
|
|
92
232
|
if (request.tools) {
|
|
93
233
|
genConfig.tools = request.tools;
|
|
94
234
|
}
|
|
235
|
+
if (thinkingConfig) {
|
|
236
|
+
genConfig.thinkingConfig = thinkingConfig;
|
|
237
|
+
}
|
|
95
238
|
const response = await client.models.generateContent({
|
|
96
239
|
model: request.model,
|
|
97
240
|
contents: contents,
|
|
@@ -104,7 +247,7 @@ class AIRuntime {
|
|
|
104
247
|
if (candidate?.content?.parts) {
|
|
105
248
|
for (const part of candidate.content.parts) {
|
|
106
249
|
if (part.call) {
|
|
107
|
-
|
|
250
|
+
const toolRes = {
|
|
108
251
|
text: JSON.stringify(part.call),
|
|
109
252
|
finishReason: 'TOOL_CALL',
|
|
110
253
|
usage: {
|
|
@@ -112,6 +255,7 @@ class AIRuntime {
|
|
|
112
255
|
outputTokens: response.usageMetadata?.candidatesTokenCount ?? 0,
|
|
113
256
|
},
|
|
114
257
|
};
|
|
258
|
+
return toolRes;
|
|
115
259
|
}
|
|
116
260
|
}
|
|
117
261
|
}
|
|
@@ -146,7 +290,7 @@ class AIRuntime {
|
|
|
146
290
|
if (currentFinishReason !== 'STOP' && currentFinishReason !== 'MAX_TOKENS') {
|
|
147
291
|
throw new Error(`Generation did not complete successfully (finish reason: ${currentFinishReason})`);
|
|
148
292
|
}
|
|
149
|
-
|
|
293
|
+
const resObj = {
|
|
150
294
|
text: accumulatedText,
|
|
151
295
|
finishReason: currentFinishReason,
|
|
152
296
|
usage: {
|
|
@@ -154,6 +298,12 @@ class AIRuntime {
|
|
|
154
298
|
outputTokens: totalOutputTokens,
|
|
155
299
|
},
|
|
156
300
|
};
|
|
301
|
+
if (useCache) {
|
|
302
|
+
const cache = this.readCache();
|
|
303
|
+
cache[cacheHash] = resObj;
|
|
304
|
+
this.writeCache(cache);
|
|
305
|
+
}
|
|
306
|
+
return resObj;
|
|
157
307
|
}
|
|
158
308
|
catch (error) {
|
|
159
309
|
throw new Error(`Sesi: ${error.message}`);
|
package/dist/ai-runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-runtime.js","sourceRoot":"","sources":["../src/ai-runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-runtime.js","sourceRoot":"","sources":["../src/ai-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RuntimeValue, RuntimeFunction } from './types';
|
|
2
|
-
export declare function getBuiltins(): Map<string, RuntimeFunction>;
|
|
2
|
+
export declare function getBuiltins(interpreter?: any): Map<string, RuntimeFunction>;
|
|
3
3
|
export declare function isTruthy(value: RuntimeValue): boolean;
|
|
4
4
|
export declare function isEqual(a: RuntimeValue, b: RuntimeValue): boolean;
|
|
5
5
|
export declare function stringify(value: RuntimeValue): string;
|
package/dist/builtins.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAKxD,wBAAgB,WAAW,
|
|
1
|
+
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAKxD,wBAAgB,WAAW,CAAC,WAAW,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CA8d3E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAIrD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAWjE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAmBrD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAQtE"}
|
package/dist/builtins.js
CHANGED
|
@@ -41,7 +41,7 @@ exports.compareValues = compareValues;
|
|
|
41
41
|
const fs = __importStar(require("fs"));
|
|
42
42
|
const path = __importStar(require("path"));
|
|
43
43
|
const child_process_1 = require("child_process");
|
|
44
|
-
function getBuiltins() {
|
|
44
|
+
function getBuiltins(interpreter) {
|
|
45
45
|
const builtins = new Map();
|
|
46
46
|
builtins.set('print', {
|
|
47
47
|
type: 'function',
|
|
@@ -122,6 +122,37 @@ function getBuiltins() {
|
|
|
122
122
|
}
|
|
123
123
|
},
|
|
124
124
|
});
|
|
125
|
+
builtins.set('from_json', {
|
|
126
|
+
type: 'function',
|
|
127
|
+
name: 'from_json',
|
|
128
|
+
params: [{ name: 'string' }],
|
|
129
|
+
body: {},
|
|
130
|
+
closure: {},
|
|
131
|
+
isBuiltin: true,
|
|
132
|
+
builtin: (str) => {
|
|
133
|
+
if (typeof str !== 'string')
|
|
134
|
+
return null;
|
|
135
|
+
try {
|
|
136
|
+
return JSON.parse(str);
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
builtins.set('exp', {
|
|
144
|
+
type: 'function',
|
|
145
|
+
name: 'exp',
|
|
146
|
+
params: [{ name: 'x' }],
|
|
147
|
+
body: {},
|
|
148
|
+
closure: {},
|
|
149
|
+
isBuiltin: true,
|
|
150
|
+
builtin: (x) => {
|
|
151
|
+
if (typeof x !== 'number')
|
|
152
|
+
return null;
|
|
153
|
+
return Math.exp(x);
|
|
154
|
+
},
|
|
155
|
+
});
|
|
125
156
|
builtins.set('num', {
|
|
126
157
|
type: 'function',
|
|
127
158
|
name: 'num',
|
|
@@ -413,6 +444,88 @@ function getBuiltins() {
|
|
|
413
444
|
isBuiltin: true,
|
|
414
445
|
builtin: () => Math.random(),
|
|
415
446
|
});
|
|
447
|
+
builtins.set('web_get', {
|
|
448
|
+
type: 'function',
|
|
449
|
+
name: 'web_get',
|
|
450
|
+
params: [{ name: 'url' }, { name: 'headers', defaultValue: {} }],
|
|
451
|
+
body: {},
|
|
452
|
+
closure: {},
|
|
453
|
+
isBuiltin: true,
|
|
454
|
+
builtin: async (...args) => {
|
|
455
|
+
const [urlVal, headersVal] = args;
|
|
456
|
+
const url = typeof urlVal === 'string' ? urlVal : '';
|
|
457
|
+
const headersObj = {};
|
|
458
|
+
if (headersVal && typeof headersVal === 'object' && !Array.isArray(headersVal)) {
|
|
459
|
+
for (const [k, v] of Object.entries(headersVal)) {
|
|
460
|
+
headersObj[k] = String(v);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
try {
|
|
464
|
+
const response = await fetch(url, {
|
|
465
|
+
method: 'GET',
|
|
466
|
+
headers: headersObj,
|
|
467
|
+
});
|
|
468
|
+
return await response.text();
|
|
469
|
+
}
|
|
470
|
+
catch (e) {
|
|
471
|
+
throw new Error(`web_get failed: ${e.message}`);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
});
|
|
475
|
+
builtins.set('web_send', {
|
|
476
|
+
type: 'function',
|
|
477
|
+
name: 'web_send',
|
|
478
|
+
params: [{ name: 'url' }, { name: 'body' }, { name: 'headers', defaultValue: {} }],
|
|
479
|
+
body: {},
|
|
480
|
+
closure: {},
|
|
481
|
+
isBuiltin: true,
|
|
482
|
+
builtin: async (...args) => {
|
|
483
|
+
const [urlVal, bodyVal, headersVal] = args;
|
|
484
|
+
const url = typeof urlVal === 'string' ? urlVal : '';
|
|
485
|
+
const body = typeof bodyVal === 'string' ? bodyVal : JSON.stringify(bodyVal);
|
|
486
|
+
const headersObj = { 'Content-Type': 'application/json' };
|
|
487
|
+
if (headersVal && typeof headersVal === 'object' && !Array.isArray(headersVal)) {
|
|
488
|
+
for (const [k, v] of Object.entries(headersVal)) {
|
|
489
|
+
headersObj[k] = String(v);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
try {
|
|
493
|
+
const response = await fetch(url, {
|
|
494
|
+
method: 'POST',
|
|
495
|
+
headers: headersObj,
|
|
496
|
+
body,
|
|
497
|
+
});
|
|
498
|
+
return await response.text();
|
|
499
|
+
}
|
|
500
|
+
catch (e) {
|
|
501
|
+
throw new Error(`web_send failed: ${e.message}`);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
builtins.set('multi_req', {
|
|
506
|
+
type: 'function',
|
|
507
|
+
name: 'multi_req',
|
|
508
|
+
params: [{ name: 'fns' }],
|
|
509
|
+
body: {},
|
|
510
|
+
closure: {},
|
|
511
|
+
isBuiltin: true,
|
|
512
|
+
builtin: async (...args) => {
|
|
513
|
+
const [fnsVal] = args;
|
|
514
|
+
if (!Array.isArray(fnsVal)) {
|
|
515
|
+
throw new Error('multi_req expects an array of functions');
|
|
516
|
+
}
|
|
517
|
+
if (!interpreter) {
|
|
518
|
+
throw new Error('multi_req interpreter reference is missing');
|
|
519
|
+
}
|
|
520
|
+
const promises = fnsVal.map(async (fn) => {
|
|
521
|
+
if (typeof fn !== 'object' || fn === null || fn.type !== 'function') {
|
|
522
|
+
throw new Error('multi_req elements must be functions');
|
|
523
|
+
}
|
|
524
|
+
return await interpreter.callSesiFunction(fn, []);
|
|
525
|
+
});
|
|
526
|
+
return await Promise.all(promises);
|
|
527
|
+
}
|
|
528
|
+
});
|
|
416
529
|
return builtins;
|
|
417
530
|
}
|
|
418
531
|
function isTruthy(value) {
|