Created
June 19, 2025 02:30
-
-
Save Dhravya/341367ef673e5d0f498d5255bcc7a478 to your computer and use it in GitHub Desktop.
Minimal Repro
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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