Public
Like
PineconeIndex
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Viewing readonly version of main branch: v124View latest version
A simple interface for making and querying Pinecone vector databases. Use OpenAI embeddings to vectorize and search
Create keys for Pinecone and OpenAI, and store then in your environment variables.
import PineconeIndex from "https://esm.town/v/peterqliu/PineconeIndex/main.tsx";
// set up your environment variables
const pineconeKey = Deno.env.get("PINECONE_KEY");
const modelToken = Deno.env.get("OPENAI_KEY");
const index = new PineconeIndex({
name: "2025-all-docs",
model: "text-embedding-ada-002",
dimensions: 1536,
pineconeKey,
modelToken,
});
await index.create();
// Using the methods directly (see bottom of README for HTTP access)
const results = await index.query("machine learning applications");
await index.upsertRecords(["Document 1", "Document 2"]);
await index.empty();
Find the most relevant documents for your query.
const results = await index.query("your search text");
Returns:
{ "matches": [ { "id": "doc-123", "score": 0.95, "metadata": { "text": "Machine learning is transforming..." } } ] }
Upload new documents to your index.
await index.upsertRecords([
"First document content",
"Second document content",
]);
Remove all documents from your index.
await index.empty();
Create a new Pinecone index (if it doesn't exist).
await index.create();
import PineconeIndex from "https://esm.town/v/peterqliu/PineconeIndex/PineconeIndex";
const index = new PineconeIndex({
name: "my-documents",
model: "text-embedding-ada-002",
dimensions: 1536,
pineconeKey: Deno.env.get("PINECONE_KEY"),
modelToken: Deno.env.get("OPENAI_KEY"),
});
// Add some documents
await index.upsertRecords([
"AI is revolutionizing healthcare",
"Machine learning enables automation",
"Solar energy is becoming more efficient",
]);
// Search for relevant documents
const results = await index.query("renewable energy technologies");
console.log(results.matches);
PineconeIndex also provides handleRequest as a convenience method to access
your indices via HTTP. This is useful when multiple other vals need to access,
or for granting access without sharing Pinecone or OpenAI keys.
const index = new PinconeIndex({...});
export default async function (req: Request): Promise<Response> {
return await index.handleRequest(req);
}
Operations are determined by the URL path. The first segment after the domain specifies the operation to perform.
const API_URL = "https://your-server-url.web.val.run";
// Search for documents: append the desired operation to the url
const searchResponse = await fetch(`${API_URL}/query/`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify("artificial intelligence trends"),
});