Skip to content

Instantly share code, notes, and snippets.

@Dhravya
Created June 19, 2025 02:30
Show Gist options
  • Save Dhravya/341367ef673e5d0f498d5255bcc7a478 to your computer and use it in GitHub Desktop.
Save Dhravya/341367ef673e5d0f498d5255bcc7a478 to your computer and use it in GitHub Desktop.
Minimal Repro
import { CloudClient } from 'chromadb';
import {createOpenAI} from "@ai-sdk/openai"
export default {
async fetch(request, env, ctx): Promise<Response> {
const openai = createOpenAI({
apiKey: "sk-proj-"
})
const model = openai.textEmbeddingModel("text-embedding-3-small")
const timings: Record<string, number> = {};
timings.start = Date.now();
const client = new CloudClient({
database: 'supermemory-db',
apiKey: 'ck-',
});
timings.clientCreated = Date.now();
console.log(`Client creation took ${timings.clientCreated - timings.start} ms`);
const url = new URL(request.url);
timings.urlParsed = Date.now();
console.log(`URL parsing took ${timings.urlParsed - timings.clientCreated} ms`);
const collection = await client.getOrCreateCollection({
name: 'test-connection-2',
embeddingFunction: {
async generate(texts) {
console.log(`Generating embeddings for ${texts.length} texts`);
timings.embeddingStart = Date.now();
const embeddings = await model.doEmbed({
values: texts,
});
timings.embeddingEnd = Date.now();
console.log(`Embedding took ${timings.embeddingEnd - timings.embeddingStart} ms`);
return embeddings.embeddings;
},
},
});
timings.collectionReady = Date.now();
console.log(`Collection ready took ${timings.collectionReady - timings.urlParsed} ms`);
if (url.pathname.startsWith('/api/add')) {
const body = (await request.json()) as { content: string };
timings.bodyParsed = Date.now();
console.log(`/api/add body parse took ${timings.bodyParsed - timings.collectionReady} ms`);
const { content } = body;
const results = await collection.upsert({
documents: [content],
ids: ['1'],
});
timings.upsertDone = Date.now();
console.log(`Upsert took ${timings.upsertDone - timings.bodyParsed} ms`);
const timingStrings = [
`Client creation took ${timings.clientCreated - timings.start} ms`,
`URL parsing took ${timings.urlParsed - timings.clientCreated} ms`,
`Collection ready took ${timings.collectionReady - timings.urlParsed} ms`,
timings.embeddingStart && timings.embeddingEnd ? `Embedding took ${timings.embeddingEnd - timings.embeddingStart} ms` : undefined,
`/api/add body parse took ${timings.bodyParsed - timings.collectionReady} ms`,
`Upsert took ${timings.upsertDone - timings.bodyParsed} ms`,
].filter(Boolean);
return new Response(JSON.stringify({ results, timings: timingStrings }), { status: 200 });
}
if (url.pathname.startsWith('/api/query')) {
const body = (await request.json()) as { query: string };
timings.bodyParsed = Date.now();
console.log(`/api/query body parse took ${timings.bodyParsed - timings.collectionReady} ms`);
const { query } = body;
const results = await collection.query({
queryTexts: [query],
nResults: 10,
});
timings.queryDone = Date.now();
console.log(`Query took ${timings.queryDone - timings.bodyParsed} ms`);
const timingStrings = [
`Client creation took ${timings.clientCreated - timings.start} ms`,
`URL parsing took ${timings.urlParsed - timings.clientCreated} ms`,
`Collection ready took ${timings.collectionReady - timings.urlParsed} ms`,
timings.embeddingStart && timings.embeddingEnd ? `Embedding took ${timings.embeddingEnd - timings.embeddingStart} ms` : undefined,
`/api/query body parse took ${timings.bodyParsed - timings.collectionReady} ms`,
`Query took ${timings.queryDone - timings.bodyParsed} ms`,
].filter(Boolean);
return new Response(JSON.stringify({ results, timings: timingStrings }), { status: 200 });
}
timings.end = Date.now();
console.log(`Total time took ${timings.end - timings.start} ms`);
return new Response('Hello World!');
},
} satisfies ExportedHandler<Env>;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment