lemon-model 1.1.1 → 1.2.1

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 (95) hide show
  1. package/README.md +79 -0
  2. package/dist/esm/cores/index.js +11 -0
  3. package/dist/esm/cores/index.js.map +1 -0
  4. package/dist/esm/cores/transformer.js +91 -0
  5. package/dist/esm/cores/transformer.js.map +1 -0
  6. package/dist/esm/genai/dump-test.js +196 -0
  7. package/dist/esm/genai/dump-test.js.map +1 -0
  8. package/dist/esm/genai/index.js +15 -0
  9. package/dist/esm/genai/index.js.map +1 -0
  10. package/dist/esm/genai/mocks.js +121 -0
  11. package/dist/esm/genai/mocks.js.map +1 -0
  12. package/dist/esm/genai/proxy.js +161 -0
  13. package/dist/esm/genai/proxy.js.map +1 -0
  14. package/dist/esm/genai/testing.js +12 -0
  15. package/dist/esm/genai/testing.js.map +1 -0
  16. package/dist/esm/genai/transport.js +131 -0
  17. package/dist/esm/genai/transport.js.map +1 -0
  18. package/dist/esm/genai/types.js +9 -0
  19. package/dist/esm/genai/types.js.map +1 -0
  20. package/dist/esm/index.js +15 -0
  21. package/dist/esm/index.js.map +1 -0
  22. package/dist/esm/package.json +3 -0
  23. package/dist/esm/socket/index.js +13 -0
  24. package/dist/esm/socket/index.js.map +1 -0
  25. package/dist/esm/socket/socket.js +833 -0
  26. package/dist/esm/socket/socket.js.map +1 -0
  27. package/dist/esm/socket/testing.js +12 -0
  28. package/dist/esm/socket/testing.js.map +1 -0
  29. package/dist/esm/socket/transport.js +603 -0
  30. package/dist/esm/socket/transport.js.map +1 -0
  31. package/dist/esm/socket/types.js +8 -0
  32. package/dist/esm/socket/types.js.map +1 -0
  33. package/dist/esm/socket/websocket.js +267 -0
  34. package/dist/esm/socket/websocket.js.map +1 -0
  35. package/dist/esm/types/core-storage.js +30 -0
  36. package/dist/esm/types/core-storage.js.map +1 -0
  37. package/dist/esm/types/core-types.js +17 -0
  38. package/dist/esm/types/core-types.js.map +1 -0
  39. package/dist/esm/types/index.js +13 -0
  40. package/dist/esm/types/index.js.map +1 -0
  41. package/dist/genai/dump-test.d.ts +82 -0
  42. package/dist/genai/dump-test.js +200 -0
  43. package/dist/genai/dump-test.js.map +1 -0
  44. package/dist/genai/index.d.ts +11 -0
  45. package/dist/genai/index.js +31 -0
  46. package/dist/genai/index.js.map +1 -0
  47. package/dist/genai/mocks.d.ts +44 -0
  48. package/dist/genai/mocks.js +127 -0
  49. package/dist/genai/mocks.js.map +1 -0
  50. package/dist/genai/proxy.d.ts +65 -0
  51. package/dist/genai/proxy.js +165 -0
  52. package/dist/genai/proxy.js.map +1 -0
  53. package/dist/genai/testing.d.ts +11 -0
  54. package/dist/genai/testing.js +28 -0
  55. package/dist/genai/testing.js.map +1 -0
  56. package/dist/genai/transport.d.ts +37 -0
  57. package/dist/genai/transport.js +136 -0
  58. package/dist/genai/transport.js.map +1 -0
  59. package/dist/genai/types.d.ts +71 -0
  60. package/dist/genai/types.js +10 -0
  61. package/dist/genai/types.js.map +1 -0
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.js +2 -0
  64. package/dist/index.js.map +1 -1
  65. package/dist/proxy/index.d.ts +12 -0
  66. package/dist/proxy/index.js +29 -0
  67. package/dist/proxy/index.js.map +1 -0
  68. package/dist/proxy/proxy.d.ts +75 -0
  69. package/dist/proxy/proxy.js +198 -0
  70. package/dist/proxy/proxy.js.map +1 -0
  71. package/dist/proxy/transport.d.ts +123 -0
  72. package/dist/proxy/transport.js +401 -0
  73. package/dist/proxy/transport.js.map +1 -0
  74. package/dist/proxy/types.d.ts +89 -0
  75. package/dist/proxy/types.js +12 -0
  76. package/dist/proxy/types.js.map +1 -0
  77. package/dist/socket/index.d.ts +9 -0
  78. package/dist/socket/index.js +29 -0
  79. package/dist/socket/index.js.map +1 -0
  80. package/dist/socket/socket.d.ts +191 -0
  81. package/dist/socket/socket.js +844 -0
  82. package/dist/socket/socket.js.map +1 -0
  83. package/dist/socket/testing.d.ts +11 -0
  84. package/dist/socket/testing.js +28 -0
  85. package/dist/socket/testing.js.map +1 -0
  86. package/dist/socket/transport.d.ts +200 -0
  87. package/dist/socket/transport.js +612 -0
  88. package/dist/socket/transport.js.map +1 -0
  89. package/dist/socket/types.d.ts +177 -0
  90. package/dist/socket/types.js +9 -0
  91. package/dist/socket/types.js.map +1 -0
  92. package/dist/socket/websocket.d.ts +89 -0
  93. package/dist/socket/websocket.js +273 -0
  94. package/dist/socket/websocket.js.map +1 -0
  95. package/package.json +26 -2
@@ -0,0 +1,161 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
21
+ const asDataUrl = (data) => {
22
+ const matched = data.match(/^data:(.*?);base64,(.*)$/);
23
+ return matched ? { mimeType: matched[1] || 'image/png', data: matched[2] || '' } : undefined;
24
+ };
25
+ const onlyDefined = (data) => Object.fromEntries(Object.entries(data).filter(([, value]) => value !== undefined));
26
+ const callFetch = (fetcher, input, init) => fetcher.call(globalThis, input, init);
27
+ export const $gemini = {
28
+ /**
29
+ * Convert common agents `GenAIResponse` shapes back into Gemini-like
30
+ * `models.generateContent()` response shape.
31
+ */
32
+ asGenerateContentResponse(data) {
33
+ var _a, _b;
34
+ const content = (_a = data === null || data === void 0 ? void 0 : data.output) === null || _a === void 0 ? void 0 : _a.content;
35
+ const dataUrl = content && typeof content === 'object' ? content === null || content === void 0 ? void 0 : content.data : undefined;
36
+ const matched = typeof dataUrl === 'string' ? asDataUrl(dataUrl) : undefined;
37
+ const text = typeof content === 'string' ? content : typeof dataUrl === 'string' && !matched ? dataUrl : '';
38
+ const candidate = (_b = data === null || data === void 0 ? void 0 : data.candidate) !== null && _b !== void 0 ? _b : (matched
39
+ ? {
40
+ content: {
41
+ parts: [
42
+ {
43
+ inlineData: {
44
+ mimeType: matched.mimeType,
45
+ data: matched.data,
46
+ },
47
+ },
48
+ ],
49
+ },
50
+ }
51
+ : text
52
+ ? {
53
+ content: {
54
+ parts: [{ text }],
55
+ },
56
+ }
57
+ : undefined);
58
+ return onlyDefined({
59
+ text,
60
+ candidates: candidate ? [candidate] : undefined,
61
+ usageMetadata: (data === null || data === void 0 ? void 0 : data.usage)
62
+ ? onlyDefined({
63
+ promptTokenCount: data.usage.promptToken,
64
+ thoughtsTokenCount: data.usage.completionToken,
65
+ totalTokenCount: data.usage.totalToken,
66
+ })
67
+ : undefined,
68
+ });
69
+ },
70
+ };
71
+ /**
72
+ * HTTP-backed Gemini-compatible `AbstractGenAI` adapter.
73
+ *
74
+ * It works in server and browser runtimes by relying only on the standard `fetch` API.
75
+ * When `transportId` is configured, HTTP is used only to trigger generation and the
76
+ * final response is collected from the configured transport receiver.
77
+ */
78
+ export class HttpAbstractGenAI {
79
+ constructor(endpoint, options = {}) {
80
+ var _a, _b;
81
+ this.endpoint = endpoint;
82
+ /** captured raw generateContent params, useful in specs and diagnostics */
83
+ this.calls = [];
84
+ this.models = {
85
+ generateContent: (params) => __awaiter(this, void 0, void 0, function* () {
86
+ this.calls.push(params);
87
+ const task = () => __awaiter(this, void 0, void 0, function* () {
88
+ const response = yield callFetch(this.fetcher, this.asEndpoint(), {
89
+ method: 'POST',
90
+ headers: Object.assign({ 'content-type': 'application/json' }, this.headers),
91
+ body: JSON.stringify(this.asAgentGenerateBody(params)),
92
+ });
93
+ if (!response.ok) {
94
+ const text = yield response.text().catch(() => '');
95
+ throw new Error(`HTTP ${response.status} ${response.statusText}`.trim() + (text ? ` - ${text}` : ''));
96
+ }
97
+ return response.json();
98
+ });
99
+ const data = this.transportId ? yield this.waitTransport(task) : yield task();
100
+ return $gemini.asGenerateContentResponse(data);
101
+ }),
102
+ };
103
+ //! NOTE: property access (not bare `fetch`) so runtimes w/o global fetch fail at call time, not construction.
104
+ this.fetcher = (_a = options.fetch) !== null && _a !== void 0 ? _a : globalThis.fetch;
105
+ this.headers = (_b = options.headers) !== null && _b !== void 0 ? _b : {};
106
+ this.transportId = options.transportId;
107
+ this.transport = options.transport;
108
+ }
109
+ waitTransport(task) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ if (!this.transport)
112
+ throw new Error(`@transport is required when transportId is set - HttpAbstractGenAI`);
113
+ return this.transport.wait(this.transportId, task);
114
+ });
115
+ }
116
+ asEndpoint() {
117
+ if (!this.transportId)
118
+ return this.endpoint;
119
+ const url = new URL(this.endpoint, 'http://localhost');
120
+ url.searchParams.set('transportId', this.transportId);
121
+ if (/^https?:\/\//.test(this.endpoint))
122
+ return url.toString();
123
+ return `${url.pathname}${url.search}${url.hash}`;
124
+ }
125
+ asAgentGenerateBody(params) {
126
+ var _a;
127
+ const config = this.withoutSystemInstruction(params.config);
128
+ const system = (_a = params.config) === null || _a === void 0 ? void 0 : _a.systemInstruction;
129
+ return {
130
+ model: params.model,
131
+ prompt: this.asPrompt(params.contents),
132
+ system,
133
+ image: this.isImageRequest(params),
134
+ config,
135
+ };
136
+ }
137
+ withoutSystemInstruction(config) {
138
+ if (!config)
139
+ return undefined;
140
+ const { systemInstruction } = config, rest = __rest(config, ["systemInstruction"]);
141
+ return Object.keys(rest).length > 0 ? rest : undefined;
142
+ }
143
+ asPrompt(contents) {
144
+ if (typeof contents === 'string')
145
+ return contents;
146
+ return { type: 'user', content: contents };
147
+ }
148
+ isImageRequest(params) {
149
+ var _a, _b;
150
+ const modalities = (_b = (_a = params.config) === null || _a === void 0 ? void 0 : _a.responseModalities) !== null && _b !== void 0 ? _b : [];
151
+ const hasImageModality = modalities.some(modality => `${modality}`.toUpperCase() === 'IMAGE');
152
+ const hasInlineImage = this.hasInlineData(params.contents);
153
+ const imageModel = params.model.includes('image') || params.model.includes('imagen');
154
+ return hasImageModality || hasInlineImage || imageModel ? true : undefined;
155
+ }
156
+ hasInlineData(contents) {
157
+ const list = Array.isArray(contents) ? contents : [contents];
158
+ return list.some(content => { var _a; return typeof content !== 'string' && ((_a = content.parts) === null || _a === void 0 ? void 0 : _a.some(part => !!part.inlineData)); });
159
+ }
160
+ }
161
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/genai/proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `genai/testing.ts`
3
+ * - isolated entry for GenAI proxy test helpers (fetch routing + `/dump` contract mocks).
4
+ * - kept OUT of the package root barrel so production bundles do not include test helpers.
5
+ *
6
+ * Usage (tests / dev only):
7
+ * import { createAgentGenerateFetcher, MockAgentGenerateController } from 'lemon-model/genai/testing';
8
+ *
9
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
10
+ */
11
+ export * from './mocks.js';
12
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../src/genai/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,SAAS,CAAC"}
@@ -0,0 +1,131 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ /**
11
+ * `genai/transport.ts`
12
+ * - JSONTransport-backed receiver for collecting GenAI generate results over `NetworkSupportable`.
13
+ * - the generic WebSocket → `NetworkSupportable` bridge lives in the shared socket core (`../socket/websocket`).
14
+ *
15
+ * @origin eureka-agents-api / src/lib/proxy/transport.ts (receiver parts; the WebSocket bridge was extracted into `../socket/websocket`)
16
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
17
+ */
18
+ import { createJSONTransport } from '../socket/transport.js';
19
+ /** JSONTransport-backed receiver used by `HttpAbstractGenAI` transport mode */
20
+ export class JSONProxyTransportReceiver {
21
+ constructor(network, options = {}) {
22
+ this.network = network;
23
+ this.options = options;
24
+ this.transport = createJSONTransport(new TransportPacketNetwork(network), options.jsonTransport);
25
+ this.transport.onMessage(data => this.resolve(data));
26
+ this.transport.onError(error => this.reject(error));
27
+ }
28
+ /**
29
+ * Run an HTTP trigger task and resolve with the next complete JSONTransport payload.
30
+ *
31
+ * Only one pending wait is supported per receiver instance.
32
+ */
33
+ wait(transportId, task) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ if (this.pending)
36
+ throw new Error(`@transport is already waiting - proxy.transport(${transportId})`);
37
+ if (!transportId)
38
+ throw new Error(`@transportId (string) is required - proxy.transport`);
39
+ const promise = new Promise((resolve, reject) => {
40
+ var _a;
41
+ const timeoutMs = (_a = this.options.timeoutMs) !== null && _a !== void 0 ? _a : 30000;
42
+ const timer = timeoutMs > 0
43
+ ? setTimeout(() => {
44
+ this.reject(new Error(`@transport[${transportId}] timeout - proxy.transport`));
45
+ }, timeoutMs)
46
+ : undefined;
47
+ this.pending = { transportId, resolve, reject, timer };
48
+ });
49
+ try {
50
+ yield task();
51
+ }
52
+ catch (e) {
53
+ this.reject(e);
54
+ }
55
+ return promise;
56
+ });
57
+ }
58
+ /** detach listeners and reject an in-flight wait */
59
+ detach() {
60
+ this.reject(new Error(`@transport detached - proxy.transport`));
61
+ this.transport.detach();
62
+ }
63
+ resolve(data) {
64
+ if (!this.pending)
65
+ return;
66
+ if (this.options.validate && !this.options.validate(data))
67
+ return;
68
+ const pending = this.pending;
69
+ this.pending = undefined;
70
+ if (pending.timer)
71
+ clearTimeout(pending.timer);
72
+ pending.resolve(data);
73
+ }
74
+ reject(error) {
75
+ if (!this.pending)
76
+ return;
77
+ const pending = this.pending;
78
+ this.pending = undefined;
79
+ if (pending.timer)
80
+ clearTimeout(pending.timer);
81
+ pending.reject(error);
82
+ }
83
+ }
84
+ /** create a receiver that filters raw network packets down to JSONTransport frames */
85
+ export const createProxyTransportReceiver = (network, options) => new JSONProxyTransportReceiver(network, options);
86
+ /** network wrapper that lets JSONTransport see only transport packet strings */
87
+ class TransportPacketNetwork {
88
+ constructor(source) {
89
+ this.source = source;
90
+ }
91
+ get readyState() {
92
+ return this.source.readyState;
93
+ }
94
+ ready() {
95
+ var _a, _b, _c;
96
+ return (_c = (_b = (_a = this.source).ready) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : Promise.resolve();
97
+ }
98
+ send(data) {
99
+ this.source.send(data);
100
+ }
101
+ onMessage(handler) {
102
+ return this.source.onMessage(data => {
103
+ if (!isTransportPacketString(data))
104
+ return;
105
+ handler(data);
106
+ });
107
+ }
108
+ configure(options) {
109
+ var _a, _b;
110
+ (_b = (_a = this.source).configure) === null || _b === void 0 ? void 0 : _b.call(_a, options);
111
+ }
112
+ onError(handler) {
113
+ return this.source.onError(handler);
114
+ }
115
+ close() {
116
+ this.source.close();
117
+ }
118
+ }
119
+ const isTransportPacketString = (data) => {
120
+ try {
121
+ const packet = JSON.parse(data);
122
+ return ((packet === null || packet === void 0 ? void 0 : packet.type) === 'json:manifest' ||
123
+ (packet === null || packet === void 0 ? void 0 : packet.type) === 'json:chunk' ||
124
+ (packet === null || packet === void 0 ? void 0 : packet.type) === 'json:complete' ||
125
+ (packet === null || packet === void 0 ? void 0 : packet.type) === 'json:error');
126
+ }
127
+ catch (_a) {
128
+ return false;
129
+ }
130
+ };
131
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/genai/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `genai/types.ts`
3
+ * - Runtime-neutral Gemini-compatible GenAI proxy surface types for F/B usage.
4
+ *
5
+ * @origin eureka-agents-api / src/lib/proxy/types.ts
6
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/genai/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `index.ts`
3
+ * - main index
4
+ *
5
+ * @author Steve Jung <steve@lemoncloud.io>
6
+ * @date 2019-08-09 initial commit
7
+ * @date 2019-11-26 cleanup and optimized for `lemon-core#v2`
8
+ *
9
+ * @copyright (C) lemoncloud.io 2019 - All Rights Reserved.
10
+ */
11
+ export * from './types/index.js';
12
+ export * from './cores/index.js';
13
+ export * from './socket/index.js';
14
+ export * from './genai/index.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `socket/index.ts`
3
+ * - shared socket(network) + json-transport core for F/B usage.
4
+ *
5
+ * @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
6
+ */
7
+ export * from './types.js';
8
+ export * from './transport.js';
9
+ export * from './websocket.js';
10
+ //! NOTE: the in-memory peer simulator (`./socket`) is intentionally NOT re-exported here.
11
+ //! It is a test/dev utility — import it via the isolated `lemon-model/socket/testing` entry
12
+ //! so production (esp. frontend) bundles do not pull in the simulator runtime.
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/socket/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,0FAA0F;AAC1F,4FAA4F;AAC5F,+EAA+E"}