Skip to content

Commit 047691f

Browse files
authored
Add MetalRetriever (#613)
* Add MetalRetriever * Add docs and example * Lint
1 parent eaa7e78 commit 047691f

File tree

10 files changed

+126
-3
lines changed

10 files changed

+126
-3
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Remote Retriever
2+
3+
This example shows how to use the Metal Retriever in a `RetrievalQAChain` to retrieve documents from Metal index.
4+
5+
## Setup
6+
7+
```bash npm2yarn
8+
npm i @getmetal/metal-sdk
9+
```
10+
11+
## Usage
12+
13+
import CodeBlock from "@theme/CodeBlock";
14+
import Example from "@examples/retrievers/metal.ts";
15+
16+
<CodeBlock language="typescript">{Example}</CodeBlock>

docs/docs/modules/indexes/retrievers/remote-retriever.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Remote Retriever
22

3-
This example shows how to use the a Remote Retriever in a `RetrievalQAChain` to retrieve documents from a remote server.
3+
This example shows how to use a Remote Retriever in a `RetrievalQAChain` to retrieve documents from a remote server.
44

55
## Usage
66

examples/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"license": "MIT",
2222
"dependencies": {
2323
"@dqbd/tiktoken": "^1.0.2",
24+
"@getmetal/metal-sdk": "^1.0.12",
2425
"@pinecone-database/pinecone": "^0.0.10",
2526
"@supabase/supabase-js": "^2.10.0",
2627
"chromadb": "^1.3.0",

examples/src/retrievers/metal.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import Metal from "@getmetal/metal-sdk";
2+
import { MetalRetriever } from "langchain/retrievers";
3+
4+
export const run = async () => {
5+
const MetalSDK = Metal.default;
6+
7+
const client = new MetalSDK(
8+
process.env.METAL_API_KEY!,
9+
process.env.METAL_CLIENT_ID!,
10+
process.env.METAL_APP_ID
11+
);
12+
const retriever = new MetalRetriever({ client });
13+
14+
const docs = await retriever.getRelevantDocuments("hello");
15+
16+
console.log(docs);
17+
};

langchain/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
"@babel/preset-env": "^7.20.2",
101101
"@dqbd/tiktoken": "^1.0.2",
102102
"@faker-js/faker": "^7.6.0",
103+
"@getmetal/metal-sdk": "^1.0.12",
103104
"@huggingface/inference": "^1.5.1",
104105
"@jest/globals": "^29.5.0",
105106
"@pinecone-database/pinecone": "^0.0.10",
@@ -147,6 +148,7 @@
147148
},
148149
"peerDependencies": {
149150
"@dqbd/tiktoken": "^1.0.2",
151+
"@getmetal/metal-sdk": "*",
150152
"@huggingface/inference": "^1.5.1",
151153
"@pinecone-database/pinecone": "^0.0.10",
152154
"@supabase/supabase-js": "^2.10.0",
@@ -169,6 +171,9 @@
169171
"@dqbd/tiktoken": {
170172
"optional": true
171173
},
174+
"@getmetal/metal-sdk": {
175+
"optional": true
176+
},
172177
"@huggingface/inference": {
173178
"optional": true
174179
},

langchain/src/retrievers/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ export {
55
SupabaseHybridSearchParams,
66
} from "./supabase-hybrid-search.js";
77
export { RemoteLangChainRetriever } from "./remote/remote-retriever.js";
8+
export { MetalRetriever } from "./metal.js";

langchain/src/retrievers/metal.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import type MetalSDK from "@getmetal/metal-sdk";
2+
3+
import { BaseRetriever } from "../schema/index.js";
4+
import { Document } from "../document.js";
5+
6+
export interface MetalRetrieverFields {
7+
client: MetalSDK.default;
8+
}
9+
10+
interface ResponseItem {
11+
text: string;
12+
[key: string]: unknown;
13+
}
14+
15+
export class MetalRetriever extends BaseRetriever {
16+
client: MetalSDK.default;
17+
18+
constructor(fields: MetalRetrieverFields) {
19+
super();
20+
21+
this.client = fields.client;
22+
}
23+
24+
async getRelevantDocuments(query: string): Promise<Document[]> {
25+
const res = await this.client.search({ text: query });
26+
27+
const items = ("data" in res ? res.data : res) as ResponseItem[];
28+
return items.map(
29+
({ text, metadata }) =>
30+
new Document({
31+
pageContent: text,
32+
metadata: metadata as Record<string, unknown>,
33+
})
34+
);
35+
}
36+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/* eslint-disable no-process-env */
2+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
3+
import { test, expect } from "@jest/globals";
4+
import Metal from "@getmetal/metal-sdk";
5+
6+
import { MetalRetriever } from "../metal.js";
7+
8+
test("MetalRetriever", async () => {
9+
const MetalSDK = Metal.default;
10+
const client = new MetalSDK(
11+
process.env.METAL_API_KEY!,
12+
process.env.METAL_CLIENT_ID!,
13+
process.env.METAL_APP_ID
14+
);
15+
const retriever = new MetalRetriever({ client });
16+
17+
const docs = await retriever.getRelevantDocuments("hello");
18+
19+
expect(docs.length).toBeGreaterThan(0);
20+
21+
console.log(docs);
22+
});

yarn.lock

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2506,6 +2506,15 @@ __metadata:
25062506
languageName: node
25072507
linkType: hard
25082508

2509+
"@getmetal/metal-sdk@npm:^1.0.12":
2510+
version: 1.0.12
2511+
resolution: "@getmetal/metal-sdk@npm:1.0.12"
2512+
dependencies:
2513+
axios: ^1.3.2
2514+
checksum: 46e3f7876b2aaad759c32a348df078c093fae89205e7050040f80300d04a0c7f1973562d1b9df74b453e2aad316fbfa5d88565e38b33c285d474cdb0356f18f3
2515+
languageName: node
2516+
linkType: hard
2517+
25092518
"@hapi/hoek@npm:^9.0.0":
25102519
version: 9.3.0
25112520
resolution: "@hapi/hoek@npm:9.3.0"
@@ -5052,6 +5061,17 @@ __metadata:
50525061
languageName: node
50535062
linkType: hard
50545063

5064+
"axios@npm:^1.3.2":
5065+
version: 1.3.4
5066+
resolution: "axios@npm:1.3.4"
5067+
dependencies:
5068+
follow-redirects: ^1.15.0
5069+
form-data: ^4.0.0
5070+
proxy-from-env: ^1.1.0
5071+
checksum: 7440edefcf8498bc3cdf39de00443e8101f249972c83b739c6e880d9d669fea9486372dbe8739e88b3bf8bb1ad15f6106693f206f078f4516fe8fd47b1c3093c
5072+
languageName: node
5073+
linkType: hard
5074+
50555075
"axobject-query@npm:^3.1.1":
50565076
version: 3.1.1
50575077
resolution: "axobject-query@npm:3.1.1"
@@ -8692,7 +8712,7 @@ __metadata:
86928712
languageName: node
86938713
linkType: hard
86948714

8695-
"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.7, follow-redirects@npm:^1.14.8":
8715+
"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.7, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.15.0":
86968716
version: 1.15.2
86978717
resolution: "follow-redirects@npm:1.15.2"
86988718
peerDependenciesMeta:
@@ -11387,6 +11407,7 @@ __metadata:
1138711407
resolution: "langchain-examples@workspace:examples"
1138811408
dependencies:
1138911409
"@dqbd/tiktoken": ^1.0.2
11410+
"@getmetal/metal-sdk": ^1.0.12
1139011411
"@pinecone-database/pinecone": ^0.0.10
1139111412
"@supabase/supabase-js": ^2.10.0
1139211413
"@tsconfig/recommended": ^1.0.2
@@ -11421,6 +11442,7 @@ __metadata:
1142111442
"@dqbd/tiktoken": ^1.0.2
1142211443
"@faker-js/faker": ^7.6.0
1142311444
"@fortaine/fetch-event-source": ^3.0.6
11445+
"@getmetal/metal-sdk": ^1.0.12
1142411446
"@huggingface/inference": ^1.5.1
1142511447
"@jest/globals": ^29.5.0
1142611448
"@pinecone-database/pinecone": ^0.0.10
@@ -11479,6 +11501,7 @@ __metadata:
1147911501
zod: ^3.21.4
1148011502
peerDependencies:
1148111503
"@dqbd/tiktoken": ^1.0.2
11504+
"@getmetal/metal-sdk": "*"
1148211505
"@huggingface/inference": ^1.5.1
1148311506
"@pinecone-database/pinecone": ^0.0.10
1148411507
"@supabase/supabase-js": ^2.10.0
@@ -11499,6 +11522,8 @@ __metadata:
1149911522
peerDependenciesMeta:
1150011523
"@dqbd/tiktoken":
1150111524
optional: true
11525+
"@getmetal/metal-sdk":
11526+
optional: true
1150211527
"@huggingface/inference":
1150311528
optional: true
1150411529
"@pinecone-database/pinecone":
@@ -14237,7 +14262,7 @@ __metadata:
1423714262
languageName: node
1423814263
linkType: hard
1423914264

14240-
"proxy-from-env@npm:1.1.0, proxy-from-env@npm:^1.0.0":
14265+
"proxy-from-env@npm:1.1.0, proxy-from-env@npm:^1.0.0, proxy-from-env@npm:^1.1.0":
1424114266
version: 1.1.0
1424214267
resolution: "proxy-from-env@npm:1.1.0"
1424314268
checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4

0 commit comments

Comments
 (0)