@sogni-ai/expo-client 1.0.0-alpha.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/CHANGELOG.md +69 -0
- package/README.md +411 -0
- package/dist/cjs/Account/index.d.ts +60 -0
- package/dist/cjs/Account/index.d.ts.map +1 -0
- package/dist/cjs/Account/index.js +188 -0
- package/dist/cjs/Account/index.js.map +1 -0
- package/dist/cjs/Account/types.d.ts +43 -0
- package/dist/cjs/Account/types.d.ts.map +1 -0
- package/dist/cjs/Account/types.js +18 -0
- package/dist/cjs/Account/types.js.map +1 -0
- package/dist/cjs/ApiClient/WebSocketClient/events.d.ts +139 -0
- package/dist/cjs/ApiClient/WebSocketClient/events.d.ts.map +1 -0
- package/dist/cjs/ApiClient/WebSocketClient/events.js +3 -0
- package/dist/cjs/ApiClient/WebSocketClient/events.js.map +1 -0
- package/dist/cjs/ApiClient/WebSocketClient/index.d.ts +45 -0
- package/dist/cjs/ApiClient/WebSocketClient/index.d.ts.map +1 -0
- package/dist/cjs/ApiClient/WebSocketClient/index.js +283 -0
- package/dist/cjs/ApiClient/WebSocketClient/index.js.map +1 -0
- package/dist/cjs/ApiClient/WebSocketClient/normalize.d.ts +45 -0
- package/dist/cjs/ApiClient/WebSocketClient/normalize.d.ts.map +1 -0
- package/dist/cjs/ApiClient/WebSocketClient/normalize.js +245 -0
- package/dist/cjs/ApiClient/WebSocketClient/normalize.js.map +1 -0
- package/dist/cjs/ApiClient/WebSocketClient/types.d.ts +9 -0
- package/dist/cjs/ApiClient/WebSocketClient/types.d.ts.map +1 -0
- package/dist/cjs/ApiClient/WebSocketClient/types.js +3 -0
- package/dist/cjs/ApiClient/WebSocketClient/types.js.map +1 -0
- package/dist/cjs/ApiClient/WebSocketClient/wireTypes.d.ts +161 -0
- package/dist/cjs/ApiClient/WebSocketClient/wireTypes.d.ts.map +1 -0
- package/dist/cjs/ApiClient/WebSocketClient/wireTypes.js +11 -0
- package/dist/cjs/ApiClient/WebSocketClient/wireTypes.js.map +1 -0
- package/dist/cjs/ApiClient/index.d.ts +60 -0
- package/dist/cjs/ApiClient/index.d.ts.map +1 -0
- package/dist/cjs/ApiClient/index.js +87 -0
- package/dist/cjs/ApiClient/index.js.map +1 -0
- package/dist/cjs/Chat/ChatStream.d.ts +42 -0
- package/dist/cjs/Chat/ChatStream.d.ts.map +1 -0
- package/dist/cjs/Chat/ChatStream.js +146 -0
- package/dist/cjs/Chat/ChatStream.js.map +1 -0
- package/dist/cjs/Chat/index.d.ts +61 -0
- package/dist/cjs/Chat/index.d.ts.map +1 -0
- package/dist/cjs/Chat/index.js +179 -0
- package/dist/cjs/Chat/index.js.map +1 -0
- package/dist/cjs/Chat/tools.d.ts +13 -0
- package/dist/cjs/Chat/tools.d.ts.map +1 -0
- package/dist/cjs/Chat/tools.js +22 -0
- package/dist/cjs/Chat/tools.js.map +1 -0
- package/dist/cjs/Chat/types.d.ts +153 -0
- package/dist/cjs/Chat/types.d.ts.map +1 -0
- package/dist/cjs/Chat/types.js +3 -0
- package/dist/cjs/Chat/types.js.map +1 -0
- package/dist/cjs/Projects/ControlNet.d.ts +30 -0
- package/dist/cjs/Projects/ControlNet.d.ts.map +1 -0
- package/dist/cjs/Projects/ControlNet.js +45 -0
- package/dist/cjs/Projects/ControlNet.js.map +1 -0
- package/dist/cjs/Projects/createJobRequestMessage.d.ts +11 -0
- package/dist/cjs/Projects/createJobRequestMessage.d.ts.map +1 -0
- package/dist/cjs/Projects/createJobRequestMessage.js +239 -0
- package/dist/cjs/Projects/createJobRequestMessage.js.map +1 -0
- package/dist/cjs/Projects/index.d.ts +96 -0
- package/dist/cjs/Projects/index.d.ts.map +1 -0
- package/dist/cjs/Projects/index.js +536 -0
- package/dist/cjs/Projects/index.js.map +1 -0
- package/dist/cjs/Projects/restNormalize.d.ts +60 -0
- package/dist/cjs/Projects/restNormalize.d.ts.map +1 -0
- package/dist/cjs/Projects/restNormalize.js +89 -0
- package/dist/cjs/Projects/restNormalize.js.map +1 -0
- package/dist/cjs/Projects/types.d.ts +233 -0
- package/dist/cjs/Projects/types.d.ts.map +1 -0
- package/dist/cjs/Projects/types.js +3 -0
- package/dist/cjs/Projects/types.js.map +1 -0
- package/dist/cjs/Projects/utils.d.ts +23 -0
- package/dist/cjs/Projects/utils.d.ts.map +1 -0
- package/dist/cjs/Projects/utils.js +65 -0
- package/dist/cjs/Projects/utils.js.map +1 -0
- package/dist/cjs/index.d.ts +63 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +116 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.d.ts +15 -0
- package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.d.ts.map +1 -0
- package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.js +47 -0
- package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
- package/dist/cjs/lib/AuthManager/AuthManagerBase.d.ts +23 -0
- package/dist/cjs/lib/AuthManager/AuthManagerBase.d.ts.map +1 -0
- package/dist/cjs/lib/AuthManager/AuthManagerBase.js +14 -0
- package/dist/cjs/lib/AuthManager/AuthManagerBase.js.map +1 -0
- package/dist/cjs/lib/AuthManager/AuthStorage.d.ts +11 -0
- package/dist/cjs/lib/AuthManager/AuthStorage.d.ts.map +1 -0
- package/dist/cjs/lib/AuthManager/AuthStorage.js +50 -0
- package/dist/cjs/lib/AuthManager/AuthStorage.js.map +1 -0
- package/dist/cjs/lib/AuthManager/TokenAuthManager.d.ts +35 -0
- package/dist/cjs/lib/AuthManager/TokenAuthManager.d.ts.map +1 -0
- package/dist/cjs/lib/AuthManager/TokenAuthManager.js +164 -0
- package/dist/cjs/lib/AuthManager/TokenAuthManager.js.map +1 -0
- package/dist/cjs/lib/AuthManager/index.d.ts +7 -0
- package/dist/cjs/lib/AuthManager/index.d.ts.map +1 -0
- package/dist/cjs/lib/AuthManager/index.js +13 -0
- package/dist/cjs/lib/AuthManager/index.js.map +1 -0
- package/dist/cjs/lib/Cache.d.ts +12 -0
- package/dist/cjs/lib/Cache.d.ts.map +1 -0
- package/dist/cjs/lib/Cache.js +36 -0
- package/dist/cjs/lib/Cache.js.map +1 -0
- package/dist/cjs/lib/DefaultLogger.d.ts +17 -0
- package/dist/cjs/lib/DefaultLogger.d.ts.map +1 -0
- package/dist/cjs/lib/DefaultLogger.js +36 -0
- package/dist/cjs/lib/DefaultLogger.js.map +1 -0
- package/dist/cjs/lib/RestClient.d.ts +18 -0
- package/dist/cjs/lib/RestClient.d.ts.map +1 -0
- package/dist/cjs/lib/RestClient.js +67 -0
- package/dist/cjs/lib/RestClient.js.map +1 -0
- package/dist/cjs/lib/TypedEventEmitter.d.ts +16 -0
- package/dist/cjs/lib/TypedEventEmitter.d.ts.map +1 -0
- package/dist/cjs/lib/TypedEventEmitter.js +46 -0
- package/dist/cjs/lib/TypedEventEmitter.js.map +1 -0
- package/dist/cjs/lib/base64.d.ts +3 -0
- package/dist/cjs/lib/base64.d.ts.map +1 -0
- package/dist/cjs/lib/base64.js +21 -0
- package/dist/cjs/lib/base64.js.map +1 -0
- package/dist/cjs/lib/getUUID.d.ts +12 -0
- package/dist/cjs/lib/getUUID.d.ts.map +1 -0
- package/dist/cjs/lib/getUUID.js +29 -0
- package/dist/cjs/lib/getUUID.js.map +1 -0
- package/dist/cjs/lib/mediaInput.d.ts +33 -0
- package/dist/cjs/lib/mediaInput.d.ts.map +1 -0
- package/dist/cjs/lib/mediaInput.js +32 -0
- package/dist/cjs/lib/mediaInput.js.map +1 -0
- package/dist/cjs/lib/utils.d.ts +10 -0
- package/dist/cjs/lib/utils.d.ts.map +1 -0
- package/dist/cjs/lib/utils.js +24 -0
- package/dist/cjs/lib/utils.js.map +1 -0
- package/dist/cjs/types/ErrorData.d.ts +7 -0
- package/dist/cjs/types/ErrorData.d.ts.map +1 -0
- package/dist/cjs/types/ErrorData.js +3 -0
- package/dist/cjs/types/ErrorData.js.map +1 -0
- package/dist/cjs/types/json.d.ts +6 -0
- package/dist/cjs/types/json.d.ts.map +1 -0
- package/dist/cjs/types/json.js +3 -0
- package/dist/cjs/types/json.js.map +1 -0
- package/dist/cjs/types/token.d.ts +2 -0
- package/dist/cjs/types/token.d.ts.map +1 -0
- package/dist/cjs/types/token.js +3 -0
- package/dist/cjs/types/token.js.map +1 -0
- package/dist/cjs/version.d.ts +2 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +5 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/cjs/wallet.d.ts +59 -0
- package/dist/cjs/wallet.d.ts.map +1 -0
- package/dist/cjs/wallet.js +125 -0
- package/dist/cjs/wallet.js.map +1 -0
- package/dist/esm/Account/index.js +183 -0
- package/dist/esm/Account/index.js.map +1 -0
- package/dist/esm/Account/types.js +15 -0
- package/dist/esm/Account/types.js.map +1 -0
- package/dist/esm/ApiClient/WebSocketClient/events.js +2 -0
- package/dist/esm/ApiClient/WebSocketClient/events.js.map +1 -0
- package/dist/esm/ApiClient/WebSocketClient/index.js +278 -0
- package/dist/esm/ApiClient/WebSocketClient/index.js.map +1 -0
- package/dist/esm/ApiClient/WebSocketClient/normalize.js +229 -0
- package/dist/esm/ApiClient/WebSocketClient/normalize.js.map +1 -0
- package/dist/esm/ApiClient/WebSocketClient/types.js +2 -0
- package/dist/esm/ApiClient/WebSocketClient/types.js.map +1 -0
- package/dist/esm/ApiClient/WebSocketClient/wireTypes.js +10 -0
- package/dist/esm/ApiClient/WebSocketClient/wireTypes.js.map +1 -0
- package/dist/esm/ApiClient/index.js +80 -0
- package/dist/esm/ApiClient/index.js.map +1 -0
- package/dist/esm/Chat/ChatStream.js +144 -0
- package/dist/esm/Chat/ChatStream.js.map +1 -0
- package/dist/esm/Chat/index.js +174 -0
- package/dist/esm/Chat/index.js.map +1 -0
- package/dist/esm/Chat/tools.js +19 -0
- package/dist/esm/Chat/tools.js.map +1 -0
- package/dist/esm/Chat/types.js +2 -0
- package/dist/esm/Chat/types.js.map +1 -0
- package/dist/esm/Projects/ControlNet.js +41 -0
- package/dist/esm/Projects/ControlNet.js.map +1 -0
- package/dist/esm/Projects/createJobRequestMessage.js +236 -0
- package/dist/esm/Projects/createJobRequestMessage.js.map +1 -0
- package/dist/esm/Projects/index.js +531 -0
- package/dist/esm/Projects/index.js.map +1 -0
- package/dist/esm/Projects/restNormalize.js +86 -0
- package/dist/esm/Projects/restNormalize.js.map +1 -0
- package/dist/esm/Projects/types.js +2 -0
- package/dist/esm/Projects/types.js.map +1 -0
- package/dist/esm/Projects/utils.js +55 -0
- package/dist/esm/Projects/utils.js.map +1 -0
- package/dist/esm/index.js +72 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/AuthManager/ApiKeyAuthManager.js +42 -0
- package/dist/esm/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
- package/dist/esm/lib/AuthManager/AuthManagerBase.js +9 -0
- package/dist/esm/lib/AuthManager/AuthManagerBase.js.map +1 -0
- package/dist/esm/lib/AuthManager/AuthStorage.js +13 -0
- package/dist/esm/lib/AuthManager/AuthStorage.js.map +1 -0
- package/dist/esm/lib/AuthManager/TokenAuthManager.js +159 -0
- package/dist/esm/lib/AuthManager/TokenAuthManager.js.map +1 -0
- package/dist/esm/lib/AuthManager/index.js +5 -0
- package/dist/esm/lib/AuthManager/index.js.map +1 -0
- package/dist/esm/lib/Cache.js +33 -0
- package/dist/esm/lib/Cache.js.map +1 -0
- package/dist/esm/lib/DefaultLogger.js +32 -0
- package/dist/esm/lib/DefaultLogger.js.map +1 -0
- package/dist/esm/lib/RestClient.js +62 -0
- package/dist/esm/lib/RestClient.js.map +1 -0
- package/dist/esm/lib/TypedEventEmitter.js +44 -0
- package/dist/esm/lib/TypedEventEmitter.js.map +1 -0
- package/dist/esm/lib/base64.js +17 -0
- package/dist/esm/lib/base64.js.map +1 -0
- package/dist/esm/lib/getUUID.js +26 -0
- package/dist/esm/lib/getUUID.js.map +1 -0
- package/dist/esm/lib/mediaInput.js +28 -0
- package/dist/esm/lib/mediaInput.js.map +1 -0
- package/dist/esm/lib/utils.js +19 -0
- package/dist/esm/lib/utils.js.map +1 -0
- package/dist/esm/types/ErrorData.js +2 -0
- package/dist/esm/types/ErrorData.js.map +1 -0
- package/dist/esm/types/json.js +2 -0
- package/dist/esm/types/json.js.map +1 -0
- package/dist/esm/types/token.js +2 -0
- package/dist/esm/types/token.js.map +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/esm/wallet.js +117 -0
- package/dist/esm/wallet.js.map +1 -0
- package/package.json +92 -0
- package/src/Account/index.ts +214 -0
- package/src/Account/types.ts +61 -0
- package/src/ApiClient/WebSocketClient/events.ts +168 -0
- package/src/ApiClient/WebSocketClient/index.ts +345 -0
- package/src/ApiClient/WebSocketClient/normalize.ts +287 -0
- package/src/ApiClient/WebSocketClient/types.ts +10 -0
- package/src/ApiClient/WebSocketClient/wireTypes.ts +183 -0
- package/src/ApiClient/index.ts +147 -0
- package/src/Chat/ChatStream.ts +164 -0
- package/src/Chat/index.ts +224 -0
- package/src/Chat/tools.ts +23 -0
- package/src/Chat/types.ts +165 -0
- package/src/Projects/ControlNet.ts +84 -0
- package/src/Projects/createJobRequestMessage.ts +241 -0
- package/src/Projects/index.ts +608 -0
- package/src/Projects/restNormalize.ts +154 -0
- package/src/Projects/types.ts +266 -0
- package/src/Projects/utils.ts +60 -0
- package/src/index.ts +217 -0
- package/src/lib/AuthManager/ApiKeyAuthManager.ts +52 -0
- package/src/lib/AuthManager/AuthManagerBase.ts +35 -0
- package/src/lib/AuthManager/AuthStorage.ts +21 -0
- package/src/lib/AuthManager/TokenAuthManager.ts +179 -0
- package/src/lib/AuthManager/index.ts +8 -0
- package/src/lib/Cache.ts +45 -0
- package/src/lib/DefaultLogger.ts +47 -0
- package/src/lib/RestClient.ts +77 -0
- package/src/lib/TypedEventEmitter.ts +52 -0
- package/src/lib/base64.ts +17 -0
- package/src/lib/getUUID.ts +27 -0
- package/src/lib/mediaInput.ts +54 -0
- package/src/lib/utils.ts +21 -0
- package/src/types/ErrorData.ts +7 -0
- package/src/types/json.ts +5 -0
- package/src/types/token.ts +1 -0
- package/src/version.ts +1 -0
- package/src/wallet.ts +158 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const TypedEventEmitter_1 = __importDefault(require("../lib/TypedEventEmitter"));
|
|
7
|
+
const getUUID_1 = __importDefault(require("../lib/getUUID"));
|
|
8
|
+
const ChatStream_1 = __importDefault(require("./ChatStream"));
|
|
9
|
+
/**
|
|
10
|
+
* Chat / LLM API — OpenAI-compatible completions over WebSocket.
|
|
11
|
+
*
|
|
12
|
+
* Phase 4b MVP: streaming + non-streaming text and multimodal (vision)
|
|
13
|
+
* completions. Tool-calling deltas are exposed on chunks/results for apps
|
|
14
|
+
* that drive their own tool loops, but the auto-execution loop and Sogni
|
|
15
|
+
* hosted tools are not yet wired up.
|
|
16
|
+
*/
|
|
17
|
+
class ChatApi extends TypedEventEmitter_1.default {
|
|
18
|
+
constructor(client) {
|
|
19
|
+
super();
|
|
20
|
+
this._streams = new Map();
|
|
21
|
+
this._availableModels = {};
|
|
22
|
+
this.completions = {
|
|
23
|
+
create: ((params) => this._create(params))
|
|
24
|
+
};
|
|
25
|
+
this._client = client;
|
|
26
|
+
client.socket.on('chatTokens', (e) => this._onTokens(e));
|
|
27
|
+
client.socket.on('chatResult', (e) => this._onResult(e));
|
|
28
|
+
client.socket.on('chatError', (e) => this._onError(e));
|
|
29
|
+
client.socket.on('swarmLLMModels', (e) => this._onModels(e));
|
|
30
|
+
}
|
|
31
|
+
/** Snapshot of the latest LLM model list pushed by the server. */
|
|
32
|
+
getAvailableModels() {
|
|
33
|
+
return { ...this._availableModels };
|
|
34
|
+
}
|
|
35
|
+
/** Subscribe to model-list updates. Returns an unsubscribe function. */
|
|
36
|
+
onModelsUpdated(listener) {
|
|
37
|
+
return this.on('modelsUpdated', listener);
|
|
38
|
+
}
|
|
39
|
+
async _create(params) {
|
|
40
|
+
if (!this._client.socket.isConnected) {
|
|
41
|
+
throw new Error('Cannot start chat completion: WebSocket is not connected. Authenticate first.');
|
|
42
|
+
}
|
|
43
|
+
if (params.autoExecuteTools) {
|
|
44
|
+
if (params.stream) {
|
|
45
|
+
throw new Error('autoExecuteTools is not supported with stream: true. Drive the tool loop yourself instead.');
|
|
46
|
+
}
|
|
47
|
+
if (!params.onToolCall) {
|
|
48
|
+
throw new Error('autoExecuteTools requires an onToolCall handler');
|
|
49
|
+
}
|
|
50
|
+
return this._runAutoToolLoop(params);
|
|
51
|
+
}
|
|
52
|
+
const stream = await this._dispatchCompletion(params);
|
|
53
|
+
if (params.stream)
|
|
54
|
+
return stream;
|
|
55
|
+
return stream.result;
|
|
56
|
+
}
|
|
57
|
+
async _dispatchCompletion(params) {
|
|
58
|
+
const jobId = (0, getUUID_1.default)();
|
|
59
|
+
const request = {
|
|
60
|
+
jobID: jobId,
|
|
61
|
+
type: 'llm',
|
|
62
|
+
model: params.model,
|
|
63
|
+
messages: params.messages,
|
|
64
|
+
max_tokens: params.max_tokens,
|
|
65
|
+
temperature: params.temperature,
|
|
66
|
+
top_p: params.top_p,
|
|
67
|
+
top_k: params.top_k,
|
|
68
|
+
min_p: params.min_p,
|
|
69
|
+
stream: !!params.stream,
|
|
70
|
+
repetition_penalty: params.repetition_penalty,
|
|
71
|
+
frequency_penalty: params.frequency_penalty,
|
|
72
|
+
presence_penalty: params.presence_penalty,
|
|
73
|
+
stop: params.stop,
|
|
74
|
+
tokenType: params.tokenType,
|
|
75
|
+
tools: params.tools,
|
|
76
|
+
tool_choice: params.tool_choice,
|
|
77
|
+
chat_template_kwargs: params.chat_template_kwargs,
|
|
78
|
+
taskProfile: params.taskProfile
|
|
79
|
+
};
|
|
80
|
+
const stream = new ChatStream_1.default(jobId, () => this._cancelStream(jobId));
|
|
81
|
+
this._streams.set(jobId, stream);
|
|
82
|
+
await this._client.socket.send('llmJobRequest', request);
|
|
83
|
+
return stream;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Multi-round tool-calling loop. Each round sends a completion, then
|
|
87
|
+
* executes any returned tool_calls via the user's onToolCall handler and
|
|
88
|
+
* appends the results to the conversation. Stops when the model returns a
|
|
89
|
+
* normal completion (no tool calls) or when maxToolRounds is reached.
|
|
90
|
+
*/
|
|
91
|
+
async _runAutoToolLoop(params) {
|
|
92
|
+
const maxRounds = params.maxToolRounds ?? 5;
|
|
93
|
+
const onToolCall = params.onToolCall;
|
|
94
|
+
const history = [];
|
|
95
|
+
let messages = params.messages.slice();
|
|
96
|
+
for (let round = 1; round <= maxRounds; round++) {
|
|
97
|
+
const stream = await this._dispatchCompletion({
|
|
98
|
+
...params,
|
|
99
|
+
messages,
|
|
100
|
+
stream: false,
|
|
101
|
+
autoExecuteTools: false,
|
|
102
|
+
onToolCall: undefined
|
|
103
|
+
});
|
|
104
|
+
const result = await stream.result;
|
|
105
|
+
if (!result.tool_calls?.length || result.finishReason !== 'tool_calls') {
|
|
106
|
+
return { ...result, ...(history.length ? { toolHistory: history } : {}) };
|
|
107
|
+
}
|
|
108
|
+
const toolResults = [];
|
|
109
|
+
for (const call of result.tool_calls) {
|
|
110
|
+
const content = await onToolCall(call);
|
|
111
|
+
toolResults.push({ tool_call_id: call.id, content });
|
|
112
|
+
}
|
|
113
|
+
history.push({ round, toolCalls: result.tool_calls, toolResults });
|
|
114
|
+
messages = [
|
|
115
|
+
...messages,
|
|
116
|
+
{
|
|
117
|
+
role: 'assistant',
|
|
118
|
+
content: result.content || null,
|
|
119
|
+
tool_calls: result.tool_calls
|
|
120
|
+
},
|
|
121
|
+
...result.tool_calls.map((call, i) => ({
|
|
122
|
+
role: 'tool',
|
|
123
|
+
content: toolResults[i].content,
|
|
124
|
+
tool_call_id: call.id,
|
|
125
|
+
name: call.function.name
|
|
126
|
+
}))
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
throw new Error(`autoExecuteTools exceeded maxToolRounds (${maxRounds}) — the model kept requesting tool calls`);
|
|
130
|
+
}
|
|
131
|
+
_onTokens(e) {
|
|
132
|
+
const stream = this._streams.get(e.jobId);
|
|
133
|
+
if (!stream)
|
|
134
|
+
return;
|
|
135
|
+
const chunk = {
|
|
136
|
+
jobId: e.jobId,
|
|
137
|
+
content: e.content,
|
|
138
|
+
...(e.role ? { role: e.role } : {}),
|
|
139
|
+
...(e.finishReason !== undefined ? { finishReason: e.finishReason } : {}),
|
|
140
|
+
...(e.usage ? { usage: e.usage } : {}),
|
|
141
|
+
...(e.tool_calls ? { tool_calls: e.tool_calls } : {})
|
|
142
|
+
};
|
|
143
|
+
stream._pushChunk(chunk);
|
|
144
|
+
this.emit('token', chunk);
|
|
145
|
+
}
|
|
146
|
+
_onResult(e) {
|
|
147
|
+
const stream = this._streams.get(e.jobId);
|
|
148
|
+
if (!stream)
|
|
149
|
+
return;
|
|
150
|
+
stream._complete(e.timeTaken, e.usage, e.workerName);
|
|
151
|
+
stream.result.then((r) => this.emit('completed', r)).catch(() => undefined);
|
|
152
|
+
this._streams.delete(e.jobId);
|
|
153
|
+
}
|
|
154
|
+
_onError(e) {
|
|
155
|
+
const stream = this._streams.get(e.jobId);
|
|
156
|
+
if (!stream)
|
|
157
|
+
return;
|
|
158
|
+
stream._fail({ code: 5000, originalCode: e.rawCode, message: e.message });
|
|
159
|
+
this.emit('failed', {
|
|
160
|
+
jobId: e.jobId,
|
|
161
|
+
error: new Error(e.message)
|
|
162
|
+
});
|
|
163
|
+
this._streams.delete(e.jobId);
|
|
164
|
+
}
|
|
165
|
+
_onModels(e) {
|
|
166
|
+
this._availableModels = e.models;
|
|
167
|
+
this.emit('modelsUpdated', this._availableModels);
|
|
168
|
+
}
|
|
169
|
+
async _cancelStream(jobId) {
|
|
170
|
+
try {
|
|
171
|
+
await this._client.socket.send('llmJobCancel', { jobID: jobId });
|
|
172
|
+
}
|
|
173
|
+
catch (e) {
|
|
174
|
+
this._client.logger.warn(`Failed to cancel chat job ${jobId}:`, e);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.default = ChatApi;
|
|
179
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Chat/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ToolCall } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Parse a tool call's arguments JSON into a typed object.
|
|
4
|
+
*
|
|
5
|
+
* Tool call arguments arrive from the model as a string (so they can be
|
|
6
|
+
* streamed character-by-character). This helper does the JSON.parse with
|
|
7
|
+
* a clearer error message than a raw SyntaxError.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const args = parseToolCallArguments<{ description: string; tags: string[] }>(call);
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseToolCallArguments<T = Record<string, unknown>>(toolCall: ToolCall): T;
|
|
13
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/Chat/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAUzF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseToolCallArguments = parseToolCallArguments;
|
|
4
|
+
/**
|
|
5
|
+
* Parse a tool call's arguments JSON into a typed object.
|
|
6
|
+
*
|
|
7
|
+
* Tool call arguments arrive from the model as a string (so they can be
|
|
8
|
+
* streamed character-by-character). This helper does the JSON.parse with
|
|
9
|
+
* a clearer error message than a raw SyntaxError.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const args = parseToolCallArguments<{ description: string; tags: string[] }>(call);
|
|
13
|
+
*/
|
|
14
|
+
function parseToolCallArguments(toolCall) {
|
|
15
|
+
try {
|
|
16
|
+
return JSON.parse(toolCall.function.arguments);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
throw new Error(`Failed to parse arguments for tool ${toolCall.function.name} (id=${toolCall.id}): ${err instanceof Error ? err.message : String(err)}. Raw arguments: ${toolCall.function.arguments}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/Chat/tools.ts"],"names":[],"mappings":";;AAYA,wDAUC;AApBD;;;;;;;;;GASG;AACH,SAAgB,sBAAsB,CAA8B,QAAkB;IACpF,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAM,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,sCAAsC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,QAAQ,CAAC,EAAE,MAC7E,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,oBAAoB,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAClD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { TokenType } from '../types/token';
|
|
2
|
+
export interface TextContentPart {
|
|
3
|
+
type: 'text';
|
|
4
|
+
text: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Image input for multimodal (vision) chat. Pass a base64-encoded data URI like
|
|
8
|
+
* `data:image/jpeg;base64,...`. Server limits: max 20 images per request, 10 MB
|
|
9
|
+
* each, longest side 1024px.
|
|
10
|
+
*/
|
|
11
|
+
export interface ImageUrlContentPart {
|
|
12
|
+
type: 'image_url';
|
|
13
|
+
image_url: {
|
|
14
|
+
url: string;
|
|
15
|
+
detail?: 'auto' | 'low' | 'high';
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export type ContentPart = TextContentPart | ImageUrlContentPart;
|
|
19
|
+
export interface ChatMessage {
|
|
20
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
21
|
+
content: string | ContentPart[] | null;
|
|
22
|
+
/** Tool calls returned by an assistant message. */
|
|
23
|
+
tool_calls?: ToolCall[];
|
|
24
|
+
/** Identifies which tool call this message responds to. */
|
|
25
|
+
tool_call_id?: string;
|
|
26
|
+
name?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Tool-calling types are kept structural only for Phase 4b. The SDK exposes
|
|
30
|
+
* the wire shape (so apps that want to drive their own tool loops can do so),
|
|
31
|
+
* but the multi-round auto-execution loop and Sogni hosted tools are deferred
|
|
32
|
+
* to a follow-up release.
|
|
33
|
+
*/
|
|
34
|
+
export interface ToolFunction {
|
|
35
|
+
name: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
parameters?: Record<string, unknown>;
|
|
38
|
+
}
|
|
39
|
+
export interface ToolDefinition {
|
|
40
|
+
type: 'function';
|
|
41
|
+
function: ToolFunction;
|
|
42
|
+
}
|
|
43
|
+
export interface ToolCallFunction {
|
|
44
|
+
name: string;
|
|
45
|
+
arguments: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ToolCall {
|
|
48
|
+
id: string;
|
|
49
|
+
type: 'function';
|
|
50
|
+
function: ToolCallFunction;
|
|
51
|
+
}
|
|
52
|
+
export interface ToolCallDelta {
|
|
53
|
+
index: number;
|
|
54
|
+
id?: string;
|
|
55
|
+
type?: 'function';
|
|
56
|
+
function?: {
|
|
57
|
+
name?: string;
|
|
58
|
+
arguments?: string;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export type ToolChoice = 'none' | 'auto' | 'required' | {
|
|
62
|
+
type: 'function';
|
|
63
|
+
function: {
|
|
64
|
+
name: string;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
export interface ChatCompletionParams {
|
|
68
|
+
model: string;
|
|
69
|
+
messages: ChatMessage[];
|
|
70
|
+
max_tokens?: number;
|
|
71
|
+
temperature?: number;
|
|
72
|
+
top_p?: number;
|
|
73
|
+
top_k?: number;
|
|
74
|
+
min_p?: number;
|
|
75
|
+
stream?: boolean;
|
|
76
|
+
repetition_penalty?: number;
|
|
77
|
+
frequency_penalty?: number;
|
|
78
|
+
presence_penalty?: number;
|
|
79
|
+
stop?: string | string[];
|
|
80
|
+
/** Token type to use for billing. Defaults to 'sogni'. */
|
|
81
|
+
tokenType?: TokenType;
|
|
82
|
+
tools?: ToolDefinition[];
|
|
83
|
+
tool_choice?: ToolChoice;
|
|
84
|
+
/** Per-request chat template arguments (e.g. `{ enable_thinking: false }`). */
|
|
85
|
+
chat_template_kwargs?: Record<string, unknown>;
|
|
86
|
+
/** Hint for server-side preset selection. */
|
|
87
|
+
taskProfile?: 'general' | 'coding' | 'reasoning';
|
|
88
|
+
/**
|
|
89
|
+
* Automatically run a multi-round tool calling loop. The SDK sends the
|
|
90
|
+
* completion, executes any returned tool calls via `onToolCall`, feeds the
|
|
91
|
+
* results back as `role: 'tool'` messages, and repeats until the model
|
|
92
|
+
* answers without calling more tools (or `maxToolRounds` is reached).
|
|
93
|
+
*
|
|
94
|
+
* Only supported when `stream: false`. For streaming flows, drive the loop
|
|
95
|
+
* yourself by inspecting `result.tool_calls` and issuing follow-up
|
|
96
|
+
* completions.
|
|
97
|
+
*/
|
|
98
|
+
autoExecuteTools?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Required when `autoExecuteTools` is true. Called for each tool call the
|
|
101
|
+
* model emits. Must return the tool result content (a string the model
|
|
102
|
+
* will see as the tool's output).
|
|
103
|
+
*/
|
|
104
|
+
onToolCall?: (toolCall: ToolCall) => Promise<string> | string;
|
|
105
|
+
/**
|
|
106
|
+
* Max number of tool-calling rounds when `autoExecuteTools` is true.
|
|
107
|
+
* Defaults to 5. Prevents infinite loops if the model keeps calling tools.
|
|
108
|
+
*/
|
|
109
|
+
maxToolRounds?: number;
|
|
110
|
+
}
|
|
111
|
+
/** Re-export for app-side use. */
|
|
112
|
+
/** One round of tool calls + results captured during an autoExecuteTools loop. */
|
|
113
|
+
export interface ToolRound {
|
|
114
|
+
round: number;
|
|
115
|
+
toolCalls: ToolCall[];
|
|
116
|
+
toolResults: Array<{
|
|
117
|
+
tool_call_id: string;
|
|
118
|
+
content: string;
|
|
119
|
+
}>;
|
|
120
|
+
}
|
|
121
|
+
export interface TokenUsage {
|
|
122
|
+
prompt_tokens: number;
|
|
123
|
+
completion_tokens: number;
|
|
124
|
+
total_tokens?: number;
|
|
125
|
+
}
|
|
126
|
+
export interface ChatCompletionChunk {
|
|
127
|
+
jobId: string;
|
|
128
|
+
content: string;
|
|
129
|
+
role?: string;
|
|
130
|
+
finishReason?: string | null;
|
|
131
|
+
usage?: TokenUsage;
|
|
132
|
+
tool_calls?: ToolCallDelta[];
|
|
133
|
+
}
|
|
134
|
+
export interface ChatCompletionResult {
|
|
135
|
+
jobId: string;
|
|
136
|
+
content: string;
|
|
137
|
+
role: string;
|
|
138
|
+
finishReason: string | null;
|
|
139
|
+
usage: TokenUsage;
|
|
140
|
+
timeTaken: number;
|
|
141
|
+
workerName?: string;
|
|
142
|
+
tool_calls?: ToolCall[];
|
|
143
|
+
/** History of tool-calling rounds when `autoExecuteTools` was used. */
|
|
144
|
+
toolHistory?: ToolRound[];
|
|
145
|
+
}
|
|
146
|
+
export interface LLMModelInfo {
|
|
147
|
+
/** Worker count currently serving this model on the selected network. */
|
|
148
|
+
workers: number;
|
|
149
|
+
/** Optional richer metadata when the server sends the full LLMModelInfo shape. */
|
|
150
|
+
displayName?: string;
|
|
151
|
+
contextLength?: number;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/Chat/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/Chat/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { MediaInput } from '../lib/mediaInput';
|
|
2
|
+
export type ControlNetName = 'canny' | 'depth' | 'inpaint' | 'instrp2p' | 'lineart' | 'lineartanime' | 'mlsd' | 'normalbae' | 'openpose' | 'scribble' | 'segmentation' | 'shuffle' | 'softedge' | 'tile' | 'instantid';
|
|
3
|
+
export type ControlNetMode = 'balanced' | 'prompt_priority' | 'cn_priority';
|
|
4
|
+
export interface ControlNetParams {
|
|
5
|
+
/** Short name of the ControlNet model. */
|
|
6
|
+
name: ControlNetName;
|
|
7
|
+
/** Control image input. Omit `image` and pass `imageAlreadyUploaded: true` if the image is already on the server. */
|
|
8
|
+
image?: MediaInput;
|
|
9
|
+
/** True when the control image was uploaded out of band and only the flag should be sent. */
|
|
10
|
+
imageAlreadyUploaded?: boolean;
|
|
11
|
+
/** 0..1. 0 = full control to prompt, 1 = full control to ControlNet. */
|
|
12
|
+
strength?: number;
|
|
13
|
+
mode?: ControlNetMode;
|
|
14
|
+
/** Step at which the ControlNet first applies (0..1). Must be < guidanceEnd. */
|
|
15
|
+
guidanceStart?: number;
|
|
16
|
+
/** Step at which the ControlNet last applies (0..1). Must be > guidanceStart. */
|
|
17
|
+
guidanceEnd?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface ControlNetParamsRaw {
|
|
20
|
+
name: ControlNetName;
|
|
21
|
+
cnImageState: 'original';
|
|
22
|
+
hasImage: boolean;
|
|
23
|
+
controlStrength?: number;
|
|
24
|
+
controlMode?: 0 | 1 | 2;
|
|
25
|
+
controlGuidanceStart?: number;
|
|
26
|
+
controlGuidanceEnd?: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function toControlNetRaw(params: ControlNetParams): ControlNetParamsRaw;
|
|
29
|
+
export declare function getMaxContextImages(modelId: string): number;
|
|
30
|
+
//# sourceMappingURL=ControlNet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ControlNet.d.ts","sourceRoot":"","sources":["../../../src/Projects/ControlNet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,OAAO,GACP,SAAS,GACT,UAAU,GACV,SAAS,GACT,cAAc,GACd,MAAM,GACN,WAAW,GACX,UAAU,GACV,UAAU,GACV,cAAc,GACd,SAAS,GACT,UAAU,GACV,MAAM,GACN,WAAW,CAAC;AAEhB,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,iBAAiB,GAAG,aAAa,CAAC;AAE5E,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,IAAI,EAAE,cAAc,CAAC;IACrB,qHAAqH;IACrH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,6FAA6F;IAC7F,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,YAAY,EAAE,UAAU,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAQD,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,mBAAmB,CAe7E;AASD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM3D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toControlNetRaw = toControlNetRaw;
|
|
4
|
+
exports.getMaxContextImages = getMaxContextImages;
|
|
5
|
+
const MODE_MAP = {
|
|
6
|
+
balanced: 0,
|
|
7
|
+
prompt_priority: 1,
|
|
8
|
+
cn_priority: 2
|
|
9
|
+
};
|
|
10
|
+
function toControlNetRaw(params) {
|
|
11
|
+
const raw = {
|
|
12
|
+
name: params.name,
|
|
13
|
+
cnImageState: 'original',
|
|
14
|
+
hasImage: !!params.image || !!params.imageAlreadyUploaded
|
|
15
|
+
};
|
|
16
|
+
if (params.strength !== undefined)
|
|
17
|
+
raw.controlStrength = clamp01(params.strength, 'strength');
|
|
18
|
+
if (params.mode)
|
|
19
|
+
raw.controlMode = MODE_MAP[params.mode];
|
|
20
|
+
if (params.guidanceStart !== undefined) {
|
|
21
|
+
raw.controlGuidanceStart = clamp01(params.guidanceStart, 'guidanceStart');
|
|
22
|
+
}
|
|
23
|
+
if (params.guidanceEnd !== undefined) {
|
|
24
|
+
raw.controlGuidanceEnd = clamp01(params.guidanceEnd, 'guidanceEnd');
|
|
25
|
+
}
|
|
26
|
+
return raw;
|
|
27
|
+
}
|
|
28
|
+
function clamp01(value, name) {
|
|
29
|
+
if (Number.isNaN(value) || value < 0 || value > 1) {
|
|
30
|
+
throw new Error(`${name} must be between 0 and 1 (got ${value})`);
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
}
|
|
34
|
+
function getMaxContextImages(modelId) {
|
|
35
|
+
if (modelId === 'gpt-image-2')
|
|
36
|
+
return 16;
|
|
37
|
+
if (modelId.startsWith('flux2_'))
|
|
38
|
+
return 6;
|
|
39
|
+
if (modelId.startsWith('qwen_image_'))
|
|
40
|
+
return 3;
|
|
41
|
+
if (modelId.includes('kontext'))
|
|
42
|
+
return 2;
|
|
43
|
+
return 3;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=ControlNet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ControlNet.js","sourceRoot":"","sources":["../../../src/Projects/ControlNet.ts"],"names":[],"mappings":";;AAqDA,0CAeC;AASD,kDAMC;AApCD,MAAM,QAAQ,GAAsC;IAClD,QAAQ,EAAE,CAAC;IACX,eAAe,EAAE,CAAC;IAClB,WAAW,EAAE,CAAC;CACf,CAAC;AAEF,SAAgB,eAAe,CAAC,MAAwB;IACtD,MAAM,GAAG,GAAwB;QAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,YAAY,EAAE,UAAU;QACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,oBAAoB;KAC1D,CAAC;IACF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAAE,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9F,IAAI,MAAM,CAAC,IAAI;QAAE,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,GAAG,CAAC,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CAAC,KAAa,EAAE,IAAY;IAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,iCAAiC,KAAK,GAAG,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAAe;IACjD,IAAI,OAAO,KAAK,aAAa;QAAE,OAAO,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ProjectParams } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Build the wire-level `jobRequest` payload from public ProjectParams.
|
|
4
|
+
*
|
|
5
|
+
* The template includes a lot of fields that look video/animation-specific
|
|
6
|
+
* because the server validates the full shape regardless of project type. We
|
|
7
|
+
* send everything verbatim and the server picks what it needs based on the
|
|
8
|
+
* model family.
|
|
9
|
+
*/
|
|
10
|
+
export default function createJobRequestMessage(id: string, params: ProjectParams): Record<string, unknown>;
|
|
11
|
+
//# sourceMappingURL=createJobRequestMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createJobRequestMessage.d.ts","sourceRoot":"","sources":["../../../src/Projects/createJobRequestMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAA0C,aAAa,EAAsB,MAAM,SAAS,CAAC;AAGpG;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,aAAa,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWzB"}
|