@theia/ai-llamafile 1.64.0-next.35 → 1.64.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.
- package/lib/common/llamafile-language-model.d.ts +3 -2
- package/lib/common/llamafile-language-model.d.ts.map +1 -1
- package/lib/common/llamafile-language-model.js +2 -1
- package/lib/common/llamafile-language-model.js.map +1 -1
- package/lib/node/llamafile-manager-impl.d.ts +2 -1
- package/lib/node/llamafile-manager-impl.d.ts.map +1 -1
- package/lib/node/llamafile-manager-impl.js +21 -1
- package/lib/node/llamafile-manager-impl.js.map +1 -1
- package/package.json +6 -6
- package/src/common/llamafile-language-model.ts +2 -1
- package/src/node/llamafile-manager-impl.ts +23 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { LanguageModel, LanguageModelRequest, LanguageModelResponse } from '@theia/ai-core';
|
|
1
|
+
import { LanguageModel, LanguageModelRequest, LanguageModelResponse, LanguageModelStatus } from '@theia/ai-core';
|
|
2
2
|
import { CancellationToken } from '@theia/core';
|
|
3
3
|
export declare class LlamafileLanguageModel implements LanguageModel {
|
|
4
4
|
readonly name: string;
|
|
5
|
+
status: LanguageModelStatus;
|
|
5
6
|
readonly uri: string;
|
|
6
7
|
readonly port: number;
|
|
7
8
|
readonly providerId = "llamafile";
|
|
@@ -11,7 +12,7 @@ export declare class LlamafileLanguageModel implements LanguageModel {
|
|
|
11
12
|
* @param uri the URI pointing to the Llamafile model location.
|
|
12
13
|
* @param port the port on which the Llamafile model server operates.
|
|
13
14
|
*/
|
|
14
|
-
constructor(name: string, uri: string, port: number);
|
|
15
|
+
constructor(name: string, status: LanguageModelStatus, uri: string, port: number);
|
|
15
16
|
get id(): string;
|
|
16
17
|
protected getSettings(request: LanguageModelRequest): Record<string, unknown>;
|
|
17
18
|
request(request: LanguageModelRequest, cancellationToken?: CancellationToken): Promise<LanguageModelResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llamafile-language-model.d.ts","sourceRoot":"","sources":["../../src/common/llamafile-language-model.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAwB,oBAAoB,EAAE,qBAAqB,EAAmC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"llamafile-language-model.d.ts","sourceRoot":"","sources":["../../src/common/llamafile-language-model.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAwB,oBAAoB,EAAE,qBAAqB,EAAE,mBAAmB,EAAmC,MAAM,gBAAgB,CAAC;AACxK,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAShD,qBAAa,sBAAuB,YAAW,aAAa;aAWpC,IAAI,EAAE,MAAM;IACrB,MAAM,EAAE,mBAAmB;aAClB,GAAG,EAAE,MAAM;aACX,IAAI,EAAE,MAAM;IAZhC,QAAQ,CAAC,UAAU,eAAe;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAa;IAEpC;;;;OAIG;gBAEiB,IAAI,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,EAClB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM;IAGhC,IAAI,EAAE,IAAI,MAAM,CAEf;IACD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUvE,OAAO,CAAC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CA6EtH"}
|
|
@@ -29,8 +29,9 @@ class LlamafileLanguageModel {
|
|
|
29
29
|
* @param uri the URI pointing to the Llamafile model location.
|
|
30
30
|
* @param port the port on which the Llamafile model server operates.
|
|
31
31
|
*/
|
|
32
|
-
constructor(name, uri, port) {
|
|
32
|
+
constructor(name, status, uri, port) {
|
|
33
33
|
this.name = name;
|
|
34
|
+
this.status = status;
|
|
34
35
|
this.uri = uri;
|
|
35
36
|
this.port = port;
|
|
36
37
|
this.providerId = 'llamafile';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llamafile-language-model.js","sourceRoot":"","sources":["../../src/common/llamafile-language-model.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,
|
|
1
|
+
{"version":3,"file":"llamafile-language-model.js","sourceRoot":"","sources":["../../src/common/llamafile-language-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { LanguageModelRegistry } from '@theia/ai-core';
|
|
1
|
+
import { LanguageModelRegistry, LanguageModelStatus } from '@theia/ai-core';
|
|
2
2
|
import { LlamafileManager, LlamafileModelDescription, LlamafileServerManagerClient } from '../common/llamafile-manager';
|
|
3
3
|
export declare class LlamafileManagerImpl implements LlamafileManager {
|
|
4
4
|
protected languageModelRegistry: LanguageModelRegistry;
|
|
5
|
+
protected calculateStatus(started: boolean, message?: string): LanguageModelStatus;
|
|
5
6
|
private processMap;
|
|
6
7
|
private client;
|
|
7
8
|
addLanguageModels(LlamafileModelDescriptions: LlamafileModelDescription[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llamafile-manager-impl.d.ts","sourceRoot":"","sources":["../../src/node/llamafile-manager-impl.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"llamafile-manager-impl.d.ts","sourceRoot":"","sources":["../../src/node/llamafile-manager-impl.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAM5E,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAExH,qBACa,oBAAqB,YAAW,gBAAgB;IAGzD,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAEvD,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAQlF,OAAO,CAAC,UAAU,CAA0D;IAC5E,OAAO,CAAC,MAAM,CAA+B;IAEvC,iBAAiB,CAAC,0BAA0B,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB/F,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAKxC,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKzC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC9C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC,SAAS,CAAC,MAAM,EAAE,4BAA4B,GAAG,IAAI;CAIxD"}
|
|
@@ -27,6 +27,14 @@ let LlamafileManagerImpl = class LlamafileManagerImpl {
|
|
|
27
27
|
constructor() {
|
|
28
28
|
this.processMap = new Map();
|
|
29
29
|
}
|
|
30
|
+
calculateStatus(started, message) {
|
|
31
|
+
if (started) {
|
|
32
|
+
return { status: 'ready' };
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return { status: 'unavailable', message: message || 'Llamafile server is not running' };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
30
38
|
async addLanguageModels(LlamafileModelDescriptions) {
|
|
31
39
|
for (const llamafile of LlamafileModelDescriptions) {
|
|
32
40
|
const model = await this.languageModelRegistry.getLanguageModel(llamafile.name);
|
|
@@ -42,7 +50,7 @@ let LlamafileManagerImpl = class LlamafileManagerImpl {
|
|
|
42
50
|
}
|
|
43
51
|
else {
|
|
44
52
|
this.languageModelRegistry.addLanguageModels([
|
|
45
|
-
new llamafile_language_model_1.LlamafileLanguageModel(llamafile.name, llamafile.uri, llamafile.port)
|
|
53
|
+
new llamafile_language_model_1.LlamafileLanguageModel(llamafile.name, this.calculateStatus(false), llamafile.uri, llamafile.port)
|
|
46
54
|
]);
|
|
47
55
|
}
|
|
48
56
|
}
|
|
@@ -68,6 +76,8 @@ let LlamafileManagerImpl = class LlamafileManagerImpl {
|
|
|
68
76
|
const fileName = (0, path_1.basename)(filePath);
|
|
69
77
|
const currentProcess = (0, child_process_1.spawn)(`./${fileName}`, ['--port', '' + llm.port, '--server', '--nobrowser'], { cwd: dir });
|
|
70
78
|
this.processMap.set(name, currentProcess);
|
|
79
|
+
// Set status to 'ready' when server is started
|
|
80
|
+
llm.status = this.calculateStatus(true);
|
|
71
81
|
currentProcess.stdout.on('data', (data) => {
|
|
72
82
|
const output = data.toString();
|
|
73
83
|
this.client.log(name, output);
|
|
@@ -79,10 +89,14 @@ let LlamafileManagerImpl = class LlamafileManagerImpl {
|
|
|
79
89
|
currentProcess.on('close', code => {
|
|
80
90
|
this.client.log(name, `LlamaFile process for file ${name} exited with code ${code}`);
|
|
81
91
|
this.processMap.delete(name);
|
|
92
|
+
// Set status to 'unavailable' when server stops
|
|
93
|
+
llm.status = this.calculateStatus(false);
|
|
82
94
|
});
|
|
83
95
|
currentProcess.on('error', error => {
|
|
84
96
|
this.client.error(name, `Error starting LlamaFile process for file ${name}: ${error.message}`);
|
|
85
97
|
this.processMap.delete(name);
|
|
98
|
+
// Set status to 'unavailable' on error
|
|
99
|
+
llm.status = this.calculateStatus(false, error.message);
|
|
86
100
|
});
|
|
87
101
|
}
|
|
88
102
|
}
|
|
@@ -91,6 +105,12 @@ let LlamafileManagerImpl = class LlamafileManagerImpl {
|
|
|
91
105
|
const currentProcess = this.processMap.get(name);
|
|
92
106
|
currentProcess.kill();
|
|
93
107
|
this.processMap.delete(name);
|
|
108
|
+
// Set status to 'unavailable' when server is stopped
|
|
109
|
+
this.languageModelRegistry.getLanguageModel(name).then(model => {
|
|
110
|
+
if (model && model instanceof llamafile_language_model_1.LlamafileLanguageModel) {
|
|
111
|
+
model.status = { status: 'unavailable' };
|
|
112
|
+
}
|
|
113
|
+
});
|
|
94
114
|
}
|
|
95
115
|
}
|
|
96
116
|
isStarted(name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llamafile-manager-impl.js","sourceRoot":"","sources":["../../src/node/llamafile-manager-impl.ts"],"names":[],"mappings":";;;;AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"llamafile-manager-impl.js","sourceRoot":"","sources":["../../src/node/llamafile-manager-impl.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/ai-llamafile",
|
|
3
|
-
"version": "1.64.
|
|
3
|
+
"version": "1.64.1",
|
|
4
4
|
"description": "Theia - Llamafile Integration",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/ai-core": "1.64.
|
|
7
|
-
"@theia/core": "1.64.
|
|
8
|
-
"@theia/output": "1.64.
|
|
6
|
+
"@theia/ai-core": "1.64.1",
|
|
7
|
+
"@theia/core": "1.64.1",
|
|
8
|
+
"@theia/output": "1.64.1",
|
|
9
9
|
"tslib": "^2.6.2"
|
|
10
10
|
},
|
|
11
11
|
"publishConfig": {
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
"watch": "theiaext watch"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@theia/ext-scripts": "1.
|
|
45
|
+
"@theia/ext-scripts": "1.64.1"
|
|
46
46
|
},
|
|
47
47
|
"nyc": {
|
|
48
48
|
"extends": "../../configs/nyc.json"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "63e84b05db2d2eda0add659f67e9552887b0da8e"
|
|
51
51
|
}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import { LanguageModel, LanguageModelMessage, LanguageModelRequest, LanguageModelResponse, LanguageModelStreamResponsePart } from '@theia/ai-core';
|
|
17
|
+
import { LanguageModel, LanguageModelMessage, LanguageModelRequest, LanguageModelResponse, LanguageModelStatus, LanguageModelStreamResponsePart } from '@theia/ai-core';
|
|
18
18
|
import { CancellationToken } from '@theia/core';
|
|
19
19
|
|
|
20
20
|
const createMessageContent = (message: LanguageModelMessage): string | undefined => {
|
|
@@ -36,6 +36,7 @@ export class LlamafileLanguageModel implements LanguageModel {
|
|
|
36
36
|
*/
|
|
37
37
|
constructor(
|
|
38
38
|
public readonly name: string,
|
|
39
|
+
public status: LanguageModelStatus,
|
|
39
40
|
public readonly uri: string,
|
|
40
41
|
public readonly port: number,
|
|
41
42
|
) { }
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
//
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
|
-
import { LanguageModelRegistry } from '@theia/ai-core';
|
|
16
|
+
import { LanguageModelRegistry, LanguageModelStatus } from '@theia/ai-core';
|
|
17
17
|
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
18
18
|
import { ChildProcessWithoutNullStreams, spawn } from 'child_process';
|
|
19
19
|
import { basename, dirname } from 'path';
|
|
@@ -27,6 +27,14 @@ export class LlamafileManagerImpl implements LlamafileManager {
|
|
|
27
27
|
@inject(LanguageModelRegistry)
|
|
28
28
|
protected languageModelRegistry: LanguageModelRegistry;
|
|
29
29
|
|
|
30
|
+
protected calculateStatus(started: boolean, message?: string): LanguageModelStatus {
|
|
31
|
+
if (started) {
|
|
32
|
+
return { status: 'ready' };
|
|
33
|
+
} else {
|
|
34
|
+
return { status: 'unavailable', message: message || 'Llamafile server is not running' };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
30
38
|
private processMap: Map<string, ChildProcessWithoutNullStreams> = new Map();
|
|
31
39
|
private client: LlamafileServerManagerClient;
|
|
32
40
|
|
|
@@ -45,6 +53,7 @@ export class LlamafileManagerImpl implements LlamafileManager {
|
|
|
45
53
|
this.languageModelRegistry.addLanguageModels([
|
|
46
54
|
new LlamafileLanguageModel(
|
|
47
55
|
llamafile.name,
|
|
56
|
+
this.calculateStatus(false),
|
|
48
57
|
llamafile.uri,
|
|
49
58
|
llamafile.port
|
|
50
59
|
)
|
|
@@ -78,6 +87,9 @@ export class LlamafileManagerImpl implements LlamafileManager {
|
|
|
78
87
|
const currentProcess = spawn(`./${fileName}`, ['--port', '' + llm.port, '--server', '--nobrowser'], { cwd: dir });
|
|
79
88
|
this.processMap.set(name, currentProcess);
|
|
80
89
|
|
|
90
|
+
// Set status to 'ready' when server is started
|
|
91
|
+
llm.status = this.calculateStatus(true);
|
|
92
|
+
|
|
81
93
|
currentProcess.stdout.on('data', (data: Buffer) => {
|
|
82
94
|
const output = data.toString();
|
|
83
95
|
this.client.log(name, output);
|
|
@@ -89,10 +101,14 @@ export class LlamafileManagerImpl implements LlamafileManager {
|
|
|
89
101
|
currentProcess.on('close', code => {
|
|
90
102
|
this.client.log(name, `LlamaFile process for file ${name} exited with code ${code}`);
|
|
91
103
|
this.processMap.delete(name);
|
|
104
|
+
// Set status to 'unavailable' when server stops
|
|
105
|
+
llm.status = this.calculateStatus(false);
|
|
92
106
|
});
|
|
93
107
|
currentProcess.on('error', error => {
|
|
94
108
|
this.client.error(name, `Error starting LlamaFile process for file ${name}: ${error.message}`);
|
|
95
109
|
this.processMap.delete(name);
|
|
110
|
+
// Set status to 'unavailable' on error
|
|
111
|
+
llm.status = this.calculateStatus(false, error.message);
|
|
96
112
|
});
|
|
97
113
|
}
|
|
98
114
|
}
|
|
@@ -102,6 +118,12 @@ export class LlamafileManagerImpl implements LlamafileManager {
|
|
|
102
118
|
const currentProcess = this.processMap.get(name);
|
|
103
119
|
currentProcess!.kill();
|
|
104
120
|
this.processMap.delete(name);
|
|
121
|
+
// Set status to 'unavailable' when server is stopped
|
|
122
|
+
this.languageModelRegistry.getLanguageModel(name).then(model => {
|
|
123
|
+
if (model && model instanceof LlamafileLanguageModel) {
|
|
124
|
+
model.status = { status: 'unavailable' };
|
|
125
|
+
}
|
|
126
|
+
});
|
|
105
127
|
}
|
|
106
128
|
}
|
|
107
129
|
|