@misterscan/sesi 1.1.2 → 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.
Files changed (77) hide show
  1. package/README.md +29 -8
  2. package/bin/sesi.js +35 -34
  3. package/dist/ai-runtime.d.ts +5 -0
  4. package/dist/ai-runtime.d.ts.map +1 -1
  5. package/dist/ai-runtime.js +157 -7
  6. package/dist/ai-runtime.js.map +1 -1
  7. package/dist/builtins.d.ts +1 -1
  8. package/dist/builtins.d.ts.map +1 -1
  9. package/dist/builtins.js +114 -1
  10. package/dist/builtins.js.map +1 -1
  11. package/dist/interpreter.d.ts +6 -1
  12. package/dist/interpreter.d.ts.map +1 -1
  13. package/dist/interpreter.js +210 -36
  14. package/dist/interpreter.js.map +1 -1
  15. package/dist/parser.d.ts.map +1 -1
  16. package/dist/parser.js +2 -0
  17. package/dist/parser.js.map +1 -1
  18. package/dist/sesi.bundled.js +534 -107
  19. package/dist/types.d.ts +9 -1
  20. package/dist/types.d.ts.map +1 -1
  21. package/dist/types.js.map +1 -1
  22. package/docs/ARCHITECTURE.md +9 -9
  23. package/docs/BUILTINS.md +87 -8
  24. package/docs/DISTRIBUTED_SYSTEMS.md +1 -1
  25. package/docs/IMAGE_GENERATION.md +82 -1
  26. package/docs/IMPLEMENTATION_SUMMARY.md +544 -533
  27. package/docs/QUICKSTART.md +41 -1
  28. package/docs/README.md +19 -13
  29. package/docs/ROADMAP.md +10 -11
  30. package/docs/SPECIFICATION.md +37 -14
  31. package/docs/SYSTEMS_REASONING.md +35 -11
  32. package/docs/bakery_logo.png +0 -0
  33. package/docs/coffee_mug.png +0 -0
  34. package/docs/desk_lamp.png +0 -0
  35. package/docs/logo.png +0 -0
  36. package/docs/notebook.png +0 -0
  37. package/docs/sesi_ai_chronicles.md +209 -0
  38. package/examples/16_modules.sesi +28 -0
  39. package/examples/17_http_client.sesi +29 -0
  40. package/examples/18_parallel_requests.sesi +37 -0
  41. package/main/chatbot.sesi +36 -0
  42. package/main/conversational_classifier_weights.json +45 -0
  43. package/main/conversational_sentences.json +304 -0
  44. package/main/epochs.sesi +94 -0
  45. package/main/gpu_orchestrator.sesi +36 -0
  46. package/main/hardware_diagnostics.sesi +118 -0
  47. package/main/inference.sesi +54 -0
  48. package/main/native_chatbot.sesi +180 -0
  49. package/main/native_synthesizer.sesi +83 -0
  50. package/main/nn_personas_trainer.sesi +302 -0
  51. package/main/nn_responses_trainer.sesi +269 -0
  52. package/main/nn_sentences_trainer.sesi +330 -0
  53. package/main/personas.json +124 -0
  54. package/main/personas_classifier_weights.json +45 -0
  55. package/main/playground.sesi +3 -1
  56. package/main/predictive_typing.sesi +127 -0
  57. package/main/query_brain.sesi +45 -0
  58. package/main/response_classifier_weights.json +45 -0
  59. package/main/retro_chat.html +239 -0
  60. package/main/retro_chat_generator.sesi +745 -0
  61. package/main/sesi_ai.sesi +158 -0
  62. package/main/sesi_db_chatbot.sesi +261 -0
  63. package/main/terminal_chat.py +385 -0
  64. package/main/tests/temp_math_mod.sesi +3 -0
  65. package/main/tests/test_image_input.sesi +40 -0
  66. package/main/tests/test_v2_features.sesi +48 -0
  67. package/main/unified_sesi_ai.sesi +334 -0
  68. package/main/varied_responses.json +304 -0
  69. package/package.json +11 -5
  70. package/main/atm_deposit.sesi +0 -37
  71. package/main/atm_withdraw.sesi +0 -37
  72. package/main/data.txt +0 -1
  73. package/main/math_aggregator.sesi +0 -15
  74. package/main/math_generator.sesi +0 -7
  75. package/main/math_processor.sesi +0 -23
  76. package/main/tax_calculator.sesi +0 -15
  77. package/main/vault.sesi +0 -15
package/README.md CHANGED
@@ -15,7 +15,13 @@
15
15
  <img alt="Framework" src="https://img.shields.io/badge/Node.js-Engine-success?logo=node.js">
16
16
  </p>
17
17
 
18
- **Sesi** is a high-performance **Systems Language** 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.
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>
21
+
22
+ <p align="center">
23
+ <a href="https://code-with-sesi.netlify.app/">Homepage</a>
24
+ </p>
19
25
 
20
26
  ## Installation
21
27
 
@@ -28,7 +34,16 @@ npm install -g sesi
28
34
  ```
29
35
 
30
36
  ### 2. Standalone Executables
31
- Don't want to install Node.js? Download the standalone executables bundled for Windows, Mac, and Linux directly from the [Releases page](https://github.com/Misterscan/Sesi/releases). Drop the executable in your system PATH and you're good to go!
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
44
+ ```
45
+
46
+ This generates installer packages in `releases/` (for available architectures) that install `sesi` to `/usr/local/bin`.
32
47
 
33
48
  ### 3. Build from Source (For contributors)
34
49
  ```bash
@@ -113,7 +128,7 @@ The root-level `SKILLS.md` file is a workspace context file for AI agents. It re
113
128
  ## Project Structure
114
129
 
115
130
  ```
116
- sesi-programming-lang/
131
+ Sesi/
117
132
  ├── SKILLS.md # AI-agent workspace context and repo guardrails
118
133
  ├── index.html # Sesi-generated landing page
119
134
  ├── eslint.config.mjs # ESLint configuration
@@ -134,7 +149,7 @@ sesi-programming-lang/
134
149
  │ └── index.ts # Main entry point
135
150
  ├── bin/
136
151
  │ └── sesi.js # CLI executable
137
- ├── examples/ # 15 sample programs demonstrating all features
152
+ ├── examples/ # 18 sample programs demonstrating all features
138
153
  ├── main/ # Main entry and specialized tests
139
154
  │ ├── playground.sesi # Main playground script
140
155
  │ ├── start.sesi # Beginner script
@@ -144,7 +159,7 @@ sesi-programming-lang/
144
159
  └── docs/ # Documentation (ARCHITECTURE, BUILTINS, SPECIFICATION, etc.)
145
160
  ```
146
161
 
147
- ## Version 1.1 Features (Complete)
162
+ ## Version 1.2 Features (In Progress)
148
163
 
149
164
  ### Core Language ✅
150
165
 
@@ -153,6 +168,11 @@ sesi-programming-lang/
153
168
  - **Control Flow**: `if/else`, `while`, `for`, and `try/catch`.
154
169
  - **Collections**: Robust Arrays and Objects.
155
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)
156
176
 
157
177
  ### Reasoning-Native Features ✅
158
178
 
@@ -163,7 +183,10 @@ sesi-programming-lang/
163
183
  - `tool_call()` for function calling
164
184
  - Basic memory for multi-turn reasoning
165
185
  - `read_file()`, `write_file()`, `to_json()`, `write_image()`, and `list_dir()` for local file I/O
166
- - **Native Orchestration**: `spawn()` and `exec()` for concurrent process management
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.
167
190
  - **Async Polling**: Native looping to auto-resume generation when hitting `MAX_TOKENS` limit
168
191
  - **Utility Builtins**: `time()` and `random()` for robust coordination
169
192
 
@@ -178,8 +201,6 @@ sesi-programming-lang/
178
201
  ### V2: Advanced Reasoning
179
202
 
180
203
  - Long-term memory and context management
181
- - Parallel model calls
182
- - Advanced error handling with Reasoning fallbacks
183
204
  - Custom tool definitions
184
205
  - Streaming responses
185
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.1.2
11
+ Sesi Programming Language v1.2.0
11
12
 
12
13
  Usage:
13
14
  sesi <file> Run a Sesi program
14
- sesi --help Show this help
15
+ sesi -help <query> Ask for help from our Sesi Co-Pilot
16
+ sesi --help <query>
17
+ sesi -h <query>
15
18
 
16
- Examples:
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.2
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] === '--version') {
42
- console.log('Sesi v1.1.2');
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
- 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
- });
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
+ }
@@ -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;
@@ -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;AAElE,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,mBAAmB,CAAoC;;IAI/D,OAAO,KAAK,MAAM,GAajB;IAEK,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IA0JlD,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"}
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"}
@@ -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.prompt,
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
- return {
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
- { role: 'user', parts: [{ text: fullPrompt }] }
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
- return {
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
- return {
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}`);
@@ -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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"}
@@ -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;
@@ -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,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CA6W1D;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"}
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) {