@liquidmetal-ai/raindrop 0.3.4 → 0.4.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 +99 -105
- package/dist/base-command.d.ts +1 -1
- package/dist/base-command.d.ts.map +1 -1
- package/dist/base-command.js +5 -2
- package/dist/commands/build/branch.js +1 -1
- package/dist/commands/build/clone.d.ts.map +1 -1
- package/dist/commands/build/clone.js +0 -4
- package/dist/commands/build/delete.js +1 -1
- package/dist/commands/build/deploy.js +1 -1
- package/dist/commands/build/env/get.js +1 -1
- package/dist/commands/build/env/set.js +1 -1
- package/dist/commands/build/find.js +1 -1
- package/dist/commands/build/generate.js +1 -1
- package/dist/commands/build/list.js +1 -1
- package/dist/commands/build/start.js +1 -1
- package/dist/commands/build/status.js +1 -1
- package/dist/commands/build/stop.js +1 -1
- package/dist/commands/build/upload.js +1 -1
- package/dist/commands/build/validate.js +1 -1
- package/dist/commands/object/delete.d.ts +2 -1
- package/dist/commands/object/delete.d.ts.map +1 -1
- package/dist/commands/object/delete.js +48 -5
- package/dist/commands/object/get.d.ts +2 -1
- package/dist/commands/object/get.d.ts.map +1 -1
- package/dist/commands/object/get.js +46 -5
- package/dist/commands/object/list.d.ts +2 -1
- package/dist/commands/object/list.d.ts.map +1 -1
- package/dist/commands/object/list.js +48 -7
- package/dist/commands/object/put.d.ts +2 -1
- package/dist/commands/object/put.d.ts.map +1 -1
- package/dist/commands/object/put.js +50 -6
- package/dist/commands/query/chunk-search.d.ts +2 -0
- package/dist/commands/query/chunk-search.d.ts.map +1 -1
- package/dist/commands/query/chunk-search.js +38 -2
- package/dist/commands/query/search.d.ts +1 -0
- package/dist/commands/query/search.d.ts.map +1 -1
- package/dist/commands/query/search.js +34 -9
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -7
- package/oclif.manifest.json +366 -303
- package/package.json +2 -1
|
@@ -18,6 +18,18 @@ Run a RAG search query against a Smart Bucket.
|
|
|
18
18
|
];
|
|
19
19
|
static flags = {
|
|
20
20
|
...BaseCommand.HIDDEN_FLAGS,
|
|
21
|
+
buckets: Flags.string({
|
|
22
|
+
char: 'b',
|
|
23
|
+
description: 'Bucket names to search in, version can be specified with @, e.g. my-bucket@versionId',
|
|
24
|
+
multiple: true,
|
|
25
|
+
required: false,
|
|
26
|
+
}),
|
|
27
|
+
moduleIds: Flags.string({
|
|
28
|
+
char: 'm',
|
|
29
|
+
description: 'Module IDs to search in',
|
|
30
|
+
multiple: true,
|
|
31
|
+
required: false,
|
|
32
|
+
}),
|
|
21
33
|
output: Flags.string({
|
|
22
34
|
char: 'o',
|
|
23
35
|
description: 'output format',
|
|
@@ -31,7 +43,7 @@ Run a RAG search query against a Smart Bucket.
|
|
|
31
43
|
hidden: true,
|
|
32
44
|
}),
|
|
33
45
|
manifest: Flags.string({
|
|
34
|
-
char: '
|
|
46
|
+
char: 'M',
|
|
35
47
|
description: 'project manifest',
|
|
36
48
|
required: false,
|
|
37
49
|
default: 'raindrop.manifest',
|
|
@@ -39,12 +51,36 @@ Run a RAG search query against a Smart Bucket.
|
|
|
39
51
|
}),
|
|
40
52
|
};
|
|
41
53
|
async searchAgent(query) {
|
|
54
|
+
// Check if both buckets and moduleIds flags are set
|
|
55
|
+
if (this.flags.buckets?.length && this.flags.moduleIds?.length) {
|
|
56
|
+
this.error('Cannot specify both --buckets and --moduleIds flags. Please use only one type of filter.');
|
|
57
|
+
}
|
|
42
58
|
const { client: searchAgentService, userId, organizationId } = await this.searchAgentService();
|
|
43
59
|
// Run the RAG search
|
|
44
60
|
const response = await searchAgentService.ragSearch({
|
|
45
61
|
userId,
|
|
46
62
|
organizationId,
|
|
47
|
-
|
|
63
|
+
bucketLocations: [
|
|
64
|
+
...(this.flags.buckets || []).map((bucket) => {
|
|
65
|
+
//string split on @ to get bucket name and version
|
|
66
|
+
const [bucketName, version] = bucket.split('@');
|
|
67
|
+
return {
|
|
68
|
+
bucketLocation: {
|
|
69
|
+
case: 'bucket',
|
|
70
|
+
value: {
|
|
71
|
+
name: bucketName,
|
|
72
|
+
version: version || '',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}),
|
|
77
|
+
...(this.flags.moduleIds || []).map((moduleId) => ({
|
|
78
|
+
bucketLocation: {
|
|
79
|
+
case: 'moduleId',
|
|
80
|
+
value: moduleId,
|
|
81
|
+
},
|
|
82
|
+
})),
|
|
83
|
+
],
|
|
48
84
|
requestId: ulid(),
|
|
49
85
|
input: query,
|
|
50
86
|
});
|
|
@@ -7,6 +7,7 @@ export default class AgentSearch extends BaseCommand<typeof AgentSearch> {
|
|
|
7
7
|
static examples: string[];
|
|
8
8
|
static flags: {
|
|
9
9
|
buckets: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
moduleIds: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
11
|
requestId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
12
|
page: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
13
|
output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/query/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW,CAAC,OAAO,WAAW,CAAC;IACtE,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,WAAW,SAAsE;IAExF,MAAM,CAAC,QAAQ,WAOb;IAEF,MAAM,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/query/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW,CAAC,OAAO,WAAW,CAAC;IACtE,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,WAAW,SAAsE;IAExF,MAAM,CAAC,QAAQ,WAOb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;MA0CV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsG3B"}
|
|
@@ -21,7 +21,13 @@ Get page 2 of previous search results.
|
|
|
21
21
|
...BaseCommand.HIDDEN_FLAGS,
|
|
22
22
|
buckets: Flags.string({
|
|
23
23
|
char: 'b',
|
|
24
|
-
description: '
|
|
24
|
+
description: 'Bucket names to search in, version can be specified with @, e.g. my-bucket@versionId',
|
|
25
|
+
multiple: true,
|
|
26
|
+
required: false,
|
|
27
|
+
}),
|
|
28
|
+
moduleIds: Flags.string({
|
|
29
|
+
char: 'm',
|
|
30
|
+
description: 'Module IDs to search in',
|
|
25
31
|
multiple: true,
|
|
26
32
|
required: false,
|
|
27
33
|
}),
|
|
@@ -47,7 +53,7 @@ Get page 2 of previous search results.
|
|
|
47
53
|
hidden: true,
|
|
48
54
|
}),
|
|
49
55
|
manifest: Flags.string({
|
|
50
|
-
char: '
|
|
56
|
+
char: 'M',
|
|
51
57
|
description: 'project manifest',
|
|
52
58
|
required: false,
|
|
53
59
|
default: 'raindrop.manifest',
|
|
@@ -55,6 +61,10 @@ Get page 2 of previous search results.
|
|
|
55
61
|
}),
|
|
56
62
|
};
|
|
57
63
|
async run() {
|
|
64
|
+
// Check if both buckets and moduleIds flags are set
|
|
65
|
+
if (this.flags.buckets?.length && this.flags.moduleIds?.length) {
|
|
66
|
+
this.error('Cannot specify both --buckets and --moduleIds flags. Please use only one type of filter.');
|
|
67
|
+
}
|
|
58
68
|
const { args, flags } = await this.parse(AgentSearch);
|
|
59
69
|
const { client: searchAgentService, userId, organizationId } = await this.searchAgentService();
|
|
60
70
|
let response;
|
|
@@ -84,16 +94,31 @@ Get page 2 of previous search results.
|
|
|
84
94
|
this.error('Search query is required when not using requestId');
|
|
85
95
|
return;
|
|
86
96
|
}
|
|
87
|
-
// Check if buckets were provided
|
|
88
|
-
if (!flags.buckets || flags.buckets.length === 0) {
|
|
89
|
-
this.error('At least one bucket ID must be specified using --buckets');
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
97
|
requestId = ulid();
|
|
93
98
|
response = await searchAgentService.runSupervisorAgent({
|
|
94
99
|
requestId,
|
|
95
100
|
input: args.query,
|
|
96
|
-
|
|
101
|
+
bucketLocations: [
|
|
102
|
+
...(this.flags.buckets || []).map((bucket) => {
|
|
103
|
+
//string split on @ to get bucket name and version
|
|
104
|
+
const [bucketName, version] = bucket.split('@');
|
|
105
|
+
return {
|
|
106
|
+
bucketLocation: {
|
|
107
|
+
case: 'bucket',
|
|
108
|
+
value: {
|
|
109
|
+
name: bucketName,
|
|
110
|
+
version: version || '',
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}),
|
|
115
|
+
...(this.flags.moduleIds || []).map((moduleId) => ({
|
|
116
|
+
bucketLocation: {
|
|
117
|
+
case: 'moduleId',
|
|
118
|
+
value: moduleId,
|
|
119
|
+
},
|
|
120
|
+
})),
|
|
121
|
+
],
|
|
97
122
|
userId,
|
|
98
123
|
organizationId,
|
|
99
124
|
});
|
|
@@ -111,7 +136,7 @@ Get page 2 of previous search results.
|
|
|
111
136
|
console.log('----------------------------------------');
|
|
112
137
|
console.log(`Type: ${result.type || 'N/A'}`);
|
|
113
138
|
console.log(`Score: ${result.score || 0}`);
|
|
114
|
-
console.log(`Source: ${result.source ? `${result.source.bucket}/${result.source.object}` : 'N/A'}`);
|
|
139
|
+
console.log(`Source: ${result.source ? `${result.source.bucket?.bucketName}/${result.source.object}` : 'N/A'}`);
|
|
115
140
|
console.log(`Content: ${result.text || 'N/A'}`);
|
|
116
141
|
console.log('----------------------------------------\n');
|
|
117
142
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type DescService } from '@bufbuild/protobuf';
|
|
2
2
|
import { type Interceptor } from '@connectrpc/connect';
|
|
3
|
-
import { StrictClient } from './strict-client.js';
|
|
4
3
|
import { Application } from '@liquidmetal-ai/drizzle/appify/build';
|
|
5
4
|
import { CatalogService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/catalog_pb';
|
|
5
|
+
import { ObjectService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/object_pb';
|
|
6
6
|
import { RainbowAuthService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/rainbow_auth_pb';
|
|
7
7
|
import { type RaindropState } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/raindrop_pb';
|
|
8
|
-
import { ObjectService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/object_pb';
|
|
9
8
|
import { SearchAgentService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/search_agent_pb';
|
|
9
|
+
import { StrictClient } from './strict-client.js';
|
|
10
10
|
export { run } from '@oclif/core';
|
|
11
11
|
export declare const EPOCH_TS: import("@bufbuild/protobuf/wkt").Timestamp;
|
|
12
12
|
export declare function configFromAppFile(appFile: string): Promise<Application[]>;
|
|
@@ -21,6 +21,9 @@ export declare function createAuthenticateInterceptor(configDir: string, rainbow
|
|
|
21
21
|
authenticate: Interceptor;
|
|
22
22
|
};
|
|
23
23
|
export declare function createTraceInterceptor(): Interceptor;
|
|
24
|
+
export declare function versionInterceptor(logger?: {
|
|
25
|
+
warn: (input: Error | string) => void;
|
|
26
|
+
}): Interceptor;
|
|
24
27
|
export declare function readState(configDir: string): Promise<RaindropState>;
|
|
25
28
|
export declare function replaceState(configDir: string, state: RaindropState): Promise<void>;
|
|
26
29
|
export declare function ensureDirectory(dir: string): Promise<void>;
|
|
@@ -35,13 +38,17 @@ export type ServiceClientOptions = {
|
|
|
35
38
|
configDir: string;
|
|
36
39
|
identity: ServiceIdentity;
|
|
37
40
|
overrideAuthToken?: string;
|
|
41
|
+
logger?: {
|
|
42
|
+
warn(input: Error | string): void;
|
|
43
|
+
error(input: Error | string): void;
|
|
44
|
+
};
|
|
38
45
|
};
|
|
39
46
|
export type ServiceClient<T extends DescService> = {
|
|
40
47
|
client: StrictClient<T>;
|
|
41
48
|
userId: string;
|
|
42
49
|
organizationId: string;
|
|
43
50
|
};
|
|
44
|
-
export declare function serviceClient<T extends DescService>(service: T, { rainbowAuth, configDir, identity, overrideAuthToken }: ServiceClientOptions): Promise<ServiceClient<T>>;
|
|
51
|
+
export declare function serviceClient<T extends DescService>(service: T, { rainbowAuth, configDir, identity, overrideAuthToken, logger }: ServiceClientOptions): Promise<ServiceClient<T>>;
|
|
45
52
|
/**
|
|
46
53
|
* Gets the current version of the raindrop package
|
|
47
54
|
* @returns The package version string or 'unknown' if it cannot be determined
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE5F,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import { create,
|
|
1
|
+
import { create, fromJsonString, toJsonString } from '@bufbuild/protobuf';
|
|
2
2
|
import { timestampDate, timestampFromDate } from '@bufbuild/protobuf/wkt';
|
|
3
|
-
import { createStrictClient } from './strict-client.js';
|
|
4
3
|
import { createConnectTransport } from '@connectrpc/connect-web';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
4
|
import { mustManifestFromString } from '@liquidmetal-ai/drizzle/appify/index';
|
|
7
5
|
import { CatalogService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/catalog_pb';
|
|
6
|
+
import { ObjectService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/object_pb';
|
|
8
7
|
import { RainbowAuthService, RefreshAccessTokenRequestSchema, } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/rainbow_auth_pb';
|
|
9
8
|
import { RaindropStateSchema } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/raindrop_pb';
|
|
10
|
-
import { ObjectService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/object_pb';
|
|
11
9
|
import { SearchAgentService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/search_agent_pb';
|
|
10
|
+
import { RAINDROP_CLI_VERSION_HEADER, RAINDROP_SERVICE_VERSION_HEADER } from '@liquidmetal-ai/drizzle/raindrop/index';
|
|
12
11
|
import { Mutex } from 'async-mutex';
|
|
13
|
-
import {
|
|
12
|
+
import { isAfter, subSeconds } from 'date-fns';
|
|
14
13
|
import * as fs from 'node:fs/promises';
|
|
15
14
|
import * as path from 'node:path';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
import semver from 'semver';
|
|
17
|
+
import { createStrictClient } from './strict-client.js';
|
|
16
18
|
import { traceStore } from './trace.js';
|
|
17
19
|
export { run } from '@oclif/core';
|
|
18
20
|
export const EPOCH_TS = timestampFromDate(new Date(0));
|
|
@@ -119,6 +121,21 @@ export function createTraceInterceptor() {
|
|
|
119
121
|
});
|
|
120
122
|
};
|
|
121
123
|
}
|
|
124
|
+
// Creates an interceptor that adds the current CLI version to request headers
|
|
125
|
+
export function versionInterceptor(logger) {
|
|
126
|
+
return (next) => async (req) => {
|
|
127
|
+
const version = await getCurrentVersion();
|
|
128
|
+
req.header.set(RAINDROP_CLI_VERSION_HEADER, version);
|
|
129
|
+
const response = await next(req);
|
|
130
|
+
const raindropServiceVersion = response.header.get(RAINDROP_SERVICE_VERSION_HEADER) ?? '0.3.4';
|
|
131
|
+
if (semver.lt(version, raindropServiceVersion)) {
|
|
132
|
+
if (logger) {
|
|
133
|
+
logger.warn(`[WARN] A newer version of Raindrop is available. Please update raindrop with "npm install -g @liquidmetal-ai/raindrop@${raindropServiceVersion}"`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return response;
|
|
137
|
+
};
|
|
138
|
+
}
|
|
122
139
|
const configBasename = 'raindrop.json';
|
|
123
140
|
export async function readState(configDir) {
|
|
124
141
|
const filename = path.join(configDir, configBasename);
|
|
@@ -171,13 +188,13 @@ export async function searchAgentService(opts) {
|
|
|
171
188
|
export async function objectService(opts) {
|
|
172
189
|
return serviceClient(ObjectService, opts);
|
|
173
190
|
}
|
|
174
|
-
export async function serviceClient(service, { rainbowAuth, configDir, identity, overrideAuthToken }) {
|
|
191
|
+
export async function serviceClient(service, { rainbowAuth, configDir, identity, overrideAuthToken, logger }) {
|
|
175
192
|
const { baseUrl, organizationId, userId } = identity;
|
|
176
193
|
const { authenticate } = createAuthenticateInterceptor(configDir, rainbowAuth, overrideAuthToken);
|
|
177
194
|
return {
|
|
178
195
|
client: createStrictClient(service, createConnectTransport({
|
|
179
196
|
baseUrl,
|
|
180
|
-
interceptors: [authenticate, createTraceInterceptor()],
|
|
197
|
+
interceptors: [authenticate, versionInterceptor(logger), createTraceInterceptor()],
|
|
181
198
|
})),
|
|
182
199
|
userId,
|
|
183
200
|
organizationId,
|