Skip to content

Commit ceaa9e9

Browse files
amirai21asafgardin
authored andcommitted
feat: rag-engine impl. - with examples, no tests yet
1 parent 4713d02 commit ceaa9e9

File tree

4 files changed

+47
-29
lines changed

4 files changed

+47
-29
lines changed

examples/studio/conversational-rag/rag-engine.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { AI21 } from 'ai21';
22
import { FileResponse, UploadFileResponse } from '../../../src/types/rag';
33

4-
async function waitForFileProcessing(client: AI21, fileId: string, interval: number = 3000): Promise<FileResponse> {
4+
async function waitForFileProcessing(
5+
client: AI21,
6+
fileId: string,
7+
interval: number = 3000,
8+
): Promise<FileResponse> {
59
while (true) {
610
const file: FileResponse = await client.ragEngine.get(fileId);
711

@@ -10,26 +14,31 @@ async function waitForFileProcessing(client: AI21, fileId: string, interval: num
1014
}
1115

1216
console.log(`File status is '${file.status}'. Waiting for it to be 'PROCESSED'...`);
13-
await new Promise(resolve => setTimeout(resolve, interval));
17+
await new Promise((resolve) => setTimeout(resolve, interval));
1418
}
1519
}
1620

1721
async function uploadQueryUpdateDelete() {
1822
const client = new AI21({ apiKey: process.env.AI21_API_KEY });
1923
try {
2024
const uploadFileResponse: UploadFileResponse = await client.ragEngine.create(
21-
'/Users/amirkoblyansky/Documents/ukraine.txt', {path: "test10"});
22-
23-
const fileId = uploadFileResponse.fileId
25+
'/Users/amirkoblyansky/Documents/ukraine.txt',
26+
{ path: 'test10' },
27+
);
28+
29+
const fileId = uploadFileResponse.fileId;
2430
let file: FileResponse = await waitForFileProcessing(client, fileId);
2531
console.log(file);
2632

27-
console.log("Now updating the file labels");
28-
await client.ragEngine.update(uploadFileResponse.fileId, {labels: ["test99"], publicUrl: "https://www.miri.com"});
33+
console.log('Now updating the file labels');
34+
await client.ragEngine.update(uploadFileResponse.fileId, {
35+
labels: ['test99'],
36+
publicUrl: 'https://www.miri.com',
37+
});
2938
file = await client.ragEngine.get(fileId);
3039
console.log(file);
3140

32-
console.log("Now deleting the file");
41+
console.log('Now deleting the file');
3342
await client.ragEngine.delete(uploadFileResponse.fileId);
3443
} catch (error) {
3544
console.error('Error:', error);
@@ -38,11 +47,10 @@ async function uploadQueryUpdateDelete() {
3847

3948
async function listFiles() {
4049
const client = new AI21({ apiKey: process.env.AI21_API_KEY });
41-
const files = await client.ragEngine.list({limit: 10});
50+
const files = await client.ragEngine.list({ limit: 10 });
4251
console.log(files);
4352
}
4453

4554
uploadQueryUpdateDelete().catch(console.error);
4655

4756
listFiles().catch(console.error);
48-

src/APIClient.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,11 @@ export abstract class APIClient {
7171
);
7272
}
7373

74-
protected makeFormDataRequest<Req>(path: string, filePath: string, opts?: RequestOptions<Req>): FinalRequestOptions {
74+
protected makeFormDataRequest<Req>(
75+
path: string,
76+
filePath: string,
77+
opts?: RequestOptions<Req>,
78+
): FinalRequestOptions {
7579
const formData = new FormData();
7680
const fileStream = createReadStream(filePath);
7781
const fileName = getBasename(filePath);
@@ -82,7 +86,7 @@ export abstract class APIClient {
8286
const body = opts.body as Record<string, string>;
8387
for (const [key, value] of Object.entries(body)) {
8488
if (Array.isArray(value)) {
85-
value.forEach(item => formData.append(key, item));
89+
value.forEach((item) => formData.append(key, item));
8690
} else {
8791
formData.append(key, value);
8892
}
@@ -91,12 +95,12 @@ export abstract class APIClient {
9195

9296
const headers = {
9397
...opts?.headers,
94-
'Content-Type': `multipart/form-data; boundary=${formData.getBoundary()}`
98+
'Content-Type': `multipart/form-data; boundary=${formData.getBoundary()}`,
9599
};
96100
console.log(headers);
97-
console.log("-------------------------");
101+
console.log('-------------------------');
98102
console.log(formData.getHeaders());
99-
console.log("-------------------------");
103+
console.log('-------------------------');
100104

101105
const options: FinalRequestOptions = {
102106
method: 'post',

src/resources/rag/ragEngine.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@ import { APIResource } from '../../APIResource';
33
import { UploadFileResponse, UploadFileRequest, ListFilesFilters, UpdateFileRequest } from '../../types/rag';
44
import { FileResponse } from 'types/rag/FileResponse';
55

6-
76
const RAG_ENGINE_PATH = '/library/files';
87

9-
108
export class RAGEngine extends APIResource {
119
create(filePath: string, body: UploadFileRequest, options?: Models.RequestOptions) {
1210
return this.client.upload<UploadFileRequest, UploadFileResponse>(RAG_ENGINE_PATH, filePath, {
@@ -17,21 +15,29 @@ export class RAGEngine extends APIResource {
1715

1816
get(fileId: string, options?: Models.RequestOptions) {
1917
return this.client.get<string, FileResponse>(
20-
`${RAG_ENGINE_PATH}/${fileId}`, options as Models.RequestOptions<string>) as Promise<FileResponse>;
18+
`${RAG_ENGINE_PATH}/${fileId}`,
19+
options as Models.RequestOptions<string>,
20+
) as Promise<FileResponse>;
2121
}
2222

2323
delete(fileId: string, options?: Models.RequestOptions) {
2424
return this.client.delete<string, null>(
25-
`${RAG_ENGINE_PATH}/${fileId}`, options as Models.RequestOptions<string>) as Promise<null>;
25+
`${RAG_ENGINE_PATH}/${fileId}`,
26+
options as Models.RequestOptions<string>,
27+
) as Promise<null>;
2628
}
2729

2830
list(body: ListFilesFilters | null, options?: Models.RequestOptions) {
29-
return this.client.get<ListFilesFilters | null, FileResponse[]>(
30-
RAG_ENGINE_PATH, {query: body, ...options} as Models.RequestOptions<ListFilesFilters | null>) as Promise<FileResponse[]>;
31+
return this.client.get<ListFilesFilters | null, FileResponse[]>(RAG_ENGINE_PATH, {
32+
query: body,
33+
...options,
34+
} as Models.RequestOptions<ListFilesFilters | null>) as Promise<FileResponse[]>;
3135
}
3236

3337
update(fileId: string, body: UpdateFileRequest, options?: Models.RequestOptions) {
34-
return this.client.put<UpdateFileRequest, null>(
35-
`${RAG_ENGINE_PATH}/${fileId}`, {body, ...options} as Models.RequestOptions<UpdateFileRequest>) as Promise<null>;
38+
return this.client.put<UpdateFileRequest, null>(`${RAG_ENGINE_PATH}/${fileId}`, {
39+
body,
40+
...options,
41+
} as Models.RequestOptions<UpdateFileRequest>) as Promise<null>;
3642
}
3743
}

src/types/rag/UploadFileRequest.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
export interface UpdateFileRequest {
2-
labels?: string[] | null;
3-
publicUrl?: string| null;
4-
}
2+
labels?: string[] | null;
3+
publicUrl?: string | null;
4+
}
55

6-
export interface UploadFileRequest extends UpdateFileRequest {
7-
path?: string | null;
8-
}
6+
export interface UploadFileRequest extends UpdateFileRequest {
7+
path?: string | null;
8+
}

0 commit comments

Comments
 (0)