@aalis/plugin-embedding-ollama 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +142 -0
- package/dist/index.js.map +1 -0
- package/package.json +34 -0
package/README.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# @aalis/plugin-embedding-ollama
|
|
2
|
+
|
|
3
|
+
运行时插件
|
|
4
|
+
|
|
5
|
+
## 角色
|
|
6
|
+
|
|
7
|
+
运行时插件
|
|
8
|
+
|
|
9
|
+
## 安装
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm add @aalis/plugin-embedding-ollama
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 文档
|
|
16
|
+
|
|
17
|
+
详见 [docs/plugins/plugin-embedding-ollama.md](../../docs/plugins/plugin-embedding-ollama.md)。
|
|
18
|
+
|
|
19
|
+
## 许可
|
|
20
|
+
|
|
21
|
+
见仓库根目录 LICENSE。
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ConfigSchema, Context } from '@aalis/core';
|
|
2
|
+
export declare const name = "@aalis/plugin-embedding-ollama";
|
|
3
|
+
export declare const displayName = "Ollama Embedding";
|
|
4
|
+
export declare const subsystem = "embedding";
|
|
5
|
+
export declare const provides: string[];
|
|
6
|
+
export declare const reusable = true;
|
|
7
|
+
export declare const configSchema: ConfigSchema;
|
|
8
|
+
export declare const defaultConfig: {
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
model: string;
|
|
11
|
+
timeoutMs: number;
|
|
12
|
+
retries: number;
|
|
13
|
+
};
|
|
14
|
+
export declare function apply(ctx: Context, config: Record<string, unknown>): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAMzD,eAAO,MAAM,IAAI,mCAAmC,CAAC;AACrD,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAC9C,eAAO,MAAM,SAAS,cAAc,CAAC;AACrC,eAAO,MAAM,QAAQ,UAAgB,CAAC;AACtC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAE7B,eAAO,MAAM,YAAY,EAAE,YAgB1B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;CAKzB,CAAC;AAmGF,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxF"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// ===== 插件元数据 =====
|
|
2
|
+
export const name = '@aalis/plugin-embedding-ollama';
|
|
3
|
+
export const displayName = 'Ollama Embedding';
|
|
4
|
+
export const subsystem = 'embedding';
|
|
5
|
+
export const provides = ['embedding'];
|
|
6
|
+
export const reusable = true;
|
|
7
|
+
export const configSchema = {
|
|
8
|
+
baseUrl: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
label: 'Ollama 地址',
|
|
11
|
+
default: 'http://localhost:11434',
|
|
12
|
+
description: '本地 Ollama 服务的 HTTP 地址',
|
|
13
|
+
},
|
|
14
|
+
model: {
|
|
15
|
+
type: 'select',
|
|
16
|
+
label: 'Embedding 模型',
|
|
17
|
+
default: 'nomic-embed-text',
|
|
18
|
+
dynamicOptions: 'embedding',
|
|
19
|
+
description: '用于生成文本向量的模型',
|
|
20
|
+
},
|
|
21
|
+
timeoutMs: { type: 'number', label: '请求超时 (ms)', default: 30000, description: '单次 embedding 请求超时时间' },
|
|
22
|
+
retries: { type: 'number', label: '失败重试次数', default: 1, description: 'fetch 失败或 5xx 时的重试次数' },
|
|
23
|
+
};
|
|
24
|
+
export const defaultConfig = {
|
|
25
|
+
baseUrl: 'http://localhost:11434',
|
|
26
|
+
model: 'nomic-embed-text',
|
|
27
|
+
timeoutMs: 30000,
|
|
28
|
+
retries: 1,
|
|
29
|
+
};
|
|
30
|
+
function formatError(err) {
|
|
31
|
+
if (err instanceof Error)
|
|
32
|
+
return err.message;
|
|
33
|
+
return String(err);
|
|
34
|
+
}
|
|
35
|
+
// ===== 服务实现 =====
|
|
36
|
+
class OllamaEmbeddingService {
|
|
37
|
+
baseUrl;
|
|
38
|
+
model;
|
|
39
|
+
timeoutMs;
|
|
40
|
+
retries;
|
|
41
|
+
/** 缓存新旧 API 检测结果:true=新版 /api/embed,false=旧版 /api/embeddings */
|
|
42
|
+
useNewApi = null;
|
|
43
|
+
constructor(baseUrl, model, timeoutMs, retries) {
|
|
44
|
+
this.baseUrl = baseUrl.replace(/\/$/, '');
|
|
45
|
+
this.model = model;
|
|
46
|
+
this.timeoutMs = Math.max(1000, timeoutMs);
|
|
47
|
+
this.retries = Math.max(0, Math.floor(retries));
|
|
48
|
+
}
|
|
49
|
+
async postJson(path, body) {
|
|
50
|
+
let lastErr;
|
|
51
|
+
for (let attempt = 0; attempt <= this.retries; attempt++) {
|
|
52
|
+
const controller = new AbortController();
|
|
53
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
54
|
+
try {
|
|
55
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
56
|
+
method: 'POST',
|
|
57
|
+
headers: { 'Content-Type': 'application/json' },
|
|
58
|
+
body: JSON.stringify(body),
|
|
59
|
+
signal: controller.signal,
|
|
60
|
+
});
|
|
61
|
+
if (res.ok || res.status < 500 || attempt >= this.retries)
|
|
62
|
+
return res;
|
|
63
|
+
lastErr = new Error(`HTTP ${res.status} ${res.statusText}`);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
lastErr = err;
|
|
67
|
+
if (attempt >= this.retries)
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
clearTimeout(timer);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
throw new Error(`Ollama embedding 请求失败: ${formatError(lastErr)}`);
|
|
75
|
+
}
|
|
76
|
+
async embed(text) {
|
|
77
|
+
// 如果还没检测过,先尝试新版 API
|
|
78
|
+
if (this.useNewApi === null) {
|
|
79
|
+
try {
|
|
80
|
+
const vec = await this.embedNew(text);
|
|
81
|
+
this.useNewApi = true;
|
|
82
|
+
return vec;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
this.useNewApi = false;
|
|
86
|
+
return this.embedLegacy(text);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return this.useNewApi ? this.embedNew(text) : this.embedLegacy(text);
|
|
90
|
+
}
|
|
91
|
+
/** 新版 Ollama API: POST /api/embed */
|
|
92
|
+
async embedNew(text) {
|
|
93
|
+
const res = await this.postJson('/api/embed', { model: this.model, input: text });
|
|
94
|
+
if (!res.ok) {
|
|
95
|
+
throw new Error(`Ollama embedding 请求失败: ${res.status} ${res.statusText}`);
|
|
96
|
+
}
|
|
97
|
+
const data = (await res.json());
|
|
98
|
+
return data.embeddings[0];
|
|
99
|
+
}
|
|
100
|
+
/** 旧版 Ollama API: POST /api/embeddings */
|
|
101
|
+
async embedLegacy(text) {
|
|
102
|
+
const res = await this.postJson('/api/embeddings', { model: this.model, prompt: text });
|
|
103
|
+
if (!res.ok) {
|
|
104
|
+
throw new Error(`Ollama embedding 请求失败: ${res.status} ${res.statusText}`);
|
|
105
|
+
}
|
|
106
|
+
const data = (await res.json());
|
|
107
|
+
return data.embedding;
|
|
108
|
+
}
|
|
109
|
+
async listModels() {
|
|
110
|
+
try {
|
|
111
|
+
const res = await fetch(`${this.baseUrl}/api/tags`);
|
|
112
|
+
if (!res.ok)
|
|
113
|
+
return [];
|
|
114
|
+
const data = (await res.json());
|
|
115
|
+
// 过滤出 embedding 类模型(名称中包含 embed 的)
|
|
116
|
+
// 如果没有特征可辨别,返回全部让用户自己选
|
|
117
|
+
return data.models.map(m => m.name);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// ===== 插件入口 =====
|
|
125
|
+
export async function apply(ctx, config) {
|
|
126
|
+
const baseUrl = config.baseUrl ?? 'http://localhost:11434';
|
|
127
|
+
const model = config.model ?? 'nomic-embed-text';
|
|
128
|
+
const timeoutMs = config.timeoutMs ?? 30000;
|
|
129
|
+
const retries = config.retries ?? 1;
|
|
130
|
+
const service = new OllamaEmbeddingService(baseUrl, model, timeoutMs, retries);
|
|
131
|
+
// 启动时检查连通性(失败不阻塞,只警告)
|
|
132
|
+
try {
|
|
133
|
+
await service.embed('ping');
|
|
134
|
+
ctx.logger.info(`Ollama Embedding 已就绪: ${model} @ ${baseUrl}`);
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
138
|
+
ctx.logger.warn(`Ollama Embedding 连通性检查失败 (${baseUrl}, model=${model}): ${msg},服务仍将注册`);
|
|
139
|
+
}
|
|
140
|
+
ctx.provide('embedding', service, { label: `Ollama / ${model}` });
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,oBAAoB;AAEpB,MAAM,CAAC,MAAM,IAAI,GAAG,gCAAgC,CAAC;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAC9C,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AACrC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAE7B,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,wBAAwB;QACjC,WAAW,EAAE,uBAAuB;KACrC;IACD,KAAK,EAAE;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,cAAc;QACrB,OAAO,EAAE,kBAAkB;QAC3B,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,aAAa;KAC3B;IACD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE;IACrG,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE;CAC9F,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,wBAAwB;IACjC,KAAK,EAAE,kBAAkB;IACzB,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,CAAC;CACX,CAAC;AAEF,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,mBAAmB;AAEnB,MAAM,sBAAsB;IAClB,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,SAAS,CAAS;IAClB,OAAO,CAAS;IACxB,gEAAgE;IACxD,SAAS,GAAmB,IAAI,CAAC;IAEzC,YAAY,OAAe,EAAE,KAAa,EAAE,SAAiB,EAAE,OAAe;QAC5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAA6B;QAChE,IAAI,OAAgB,CAAC;QACrB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;YACzD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACnE,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;oBAChD,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;gBACH,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO,GAAG,CAAC;gBACtE,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,GAAG,GAAG,CAAC;gBACd,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO;oBAAE,MAAM,GAAG,CAAC;YACzC,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,oBAAoB;QACpB,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,OAAO,GAAG,CAAC;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,qCAAqC;IAC7B,KAAK,CAAC,QAAQ,CAAC,IAAY;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA+B,CAAC;QAC9D,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,0CAA0C;IAClC,KAAK,CAAC,WAAW,CAAC,IAAY;QACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC3D,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,CAAC,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmC,CAAC;YAClE,mCAAmC;YACnC,uBAAuB;YACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAED,mBAAmB;AAEnB,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY,EAAE,MAA+B;IACvE,MAAM,OAAO,GAAI,MAAM,CAAC,OAAkB,IAAI,wBAAwB,CAAC;IACvE,MAAM,KAAK,GAAI,MAAM,CAAC,KAAgB,IAAI,kBAAkB,CAAC;IAC7D,MAAM,SAAS,GAAI,MAAM,CAAC,SAAoB,IAAI,KAAK,CAAC;IACxD,MAAM,OAAO,GAAI,MAAM,CAAC,OAAkB,IAAI,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAE/E,sBAAsB;IACtB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,KAAK,MAAM,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,OAAO,WAAW,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1F,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,KAAK,EAAE,EAAE,CAAC,CAAC;AACpE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aalis/plugin-embedding-ollama",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"aalis-plugin"
|
|
7
|
+
],
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@types/node": "^22.0.0",
|
|
15
|
+
"typescript": "^5.7.0",
|
|
16
|
+
"@aalis/core": "0.1.0",
|
|
17
|
+
"@aalis/plugin-webui-api": "0.1.0",
|
|
18
|
+
"@aalis/plugin-embedding-api": "0.1.0"
|
|
19
|
+
},
|
|
20
|
+
"peerDependencies": {
|
|
21
|
+
"@aalis/core": "^0.1.0"
|
|
22
|
+
},
|
|
23
|
+
"aalis": {
|
|
24
|
+
"service": {
|
|
25
|
+
"provides": [
|
|
26
|
+
"embedding"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc",
|
|
32
|
+
"dev": "tsc --watch"
|
|
33
|
+
}
|
|
34
|
+
}
|