Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

- Fix TS2590 when constructing Agent or calling startGeneration with large model
catalogs (#414)
- Pass embedding providerMetadata to usageHandler (#393)

## 0.7.8

Expand Down
35 changes: 35 additions & 0 deletions src/vercel/client/search.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
type MockedFunction,
} from "vitest";
import type { ModelMessage } from "ai";
import { MockEmbeddingModelV4 } from "ai/test";
import {
type Auth,
type StorageActionWriter,
Expand All @@ -15,6 +16,7 @@ import {
import type { MessageDoc } from "../../validators.js";
import type { ActionCtx, QueryCtx } from "./types.js";
import {
embedMany,
fetchContextWithPrompt,
fetchContextMessages,
filterOutOrphanedToolMessages,
Expand Down Expand Up @@ -105,6 +107,39 @@ describe("search.ts", () => {
process.env.CONVEX_CLOUD_URL = "https://example.convex.cloud";
});

describe("embedMany", () => {
it("passes the provider metadata to the usage handler", async () => {
const providerMetadata = { testProvider: { cost: 0.000002 } };
const embeddingModel = new MockEmbeddingModelV4({
modelId: "test-embedding",
doEmbed: {
embeddings: [[0.1, 0.2]],
usage: { tokens: 3 },
providerMetadata,
warnings: [],
},
});
const usageHandler = vi.fn();

await embedMany({} as ActionCtx, {
userId: "user",
threadId: "thread",
values: ["hello"],
embeddingModel,
usageHandler,
});

expect(usageHandler).toHaveBeenCalledWith(
expect.anything(),
expect.objectContaining({
model: "test-embedding",
providerMetadata,
usage: expect.objectContaining({ inputTokens: 3 }),
}),
);
});
});

describe("getPromptArray", () => {
it("should return empty array for undefined prompt", () => {
expect(getPromptArray(undefined)).toEqual([]);
Expand Down
2 changes: 1 addition & 1 deletion src/vercel/client/search.ts
Original file line number Diff line number Diff line change
Expand Up @@ -499,7 +499,7 @@ export async function embedMany(
agentName,
model: getModelName(effectiveEmbeddingModel),
provider: getProviderName(effectiveEmbeddingModel),
providerMetadata: undefined,
providerMetadata: result.providerMetadata,
usage: {
inputTokens: result.usage.tokens,
outputTokens: 0,
Expand Down
Loading