-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Expand file tree
/
Copy pathmocks.ts
More file actions
127 lines (119 loc) · 3.87 KB
/
mocks.ts
File metadata and controls
127 lines (119 loc) · 3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import type { GoogleGenAIChat, GoogleGenAIClient, GoogleGenAIResponse } from '@sentry/core';
export class MockGoogleGenAI implements GoogleGenAIClient {
public models: {
generateContent: (...args: unknown[]) => Promise<GoogleGenAIResponse>;
generateContentStream: (...args: unknown[]) => Promise<AsyncGenerator<GoogleGenAIResponse, any, unknown>>;
};
public chats: {
create: (...args: unknown[]) => GoogleGenAIChat;
};
public apiKey: string;
public constructor(config: { apiKey: string }) {
this.apiKey = config.apiKey;
// models.generateContent functionality
this.models = {
generateContent: async (...args: unknown[]) => {
const params = args[0] as { model: string; contents?: unknown };
// Simulate processing time
await new Promise(resolve => setTimeout(resolve, 10));
if (params.model === 'error-model') {
const error = new Error('Model not found');
(error as unknown as { status: number }).status = 404;
(error as unknown as { headers: Record<string, string> }).headers = { 'x-request-id': 'mock-request-123' };
throw error;
}
return {
candidates: [
{
content: {
parts: [
{
text: 'Hello from Google GenAI mock!',
},
],
role: 'model',
},
finishReason: 'stop',
index: 0,
},
],
usageMetadata: {
promptTokenCount: 8,
candidatesTokenCount: 12,
totalTokenCount: 20,
},
};
},
generateContentStream: async () => {
// Return a promise that resolves to an async generator
return (async function* (): AsyncGenerator<GoogleGenAIResponse, any, unknown> {
yield {
candidates: [
{
content: {
parts: [{ text: 'Streaming response' }],
role: 'model',
},
finishReason: 'stop',
index: 0,
},
],
};
})();
},
};
// chats.create implementation
this.chats = {
create: (...args: unknown[]) => {
const params = args[0] as { model: string; config?: Record<string, unknown> };
const model = params.model;
return {
modelVersion: model,
sendMessage: async (..._messageArgs: unknown[]) => {
// Simulate processing time
await new Promise(resolve => setTimeout(resolve, 10));
return {
candidates: [
{
content: {
parts: [
{
text: 'This is a joke from the chat!',
},
],
role: 'model',
},
finishReason: 'stop',
index: 0,
},
],
usageMetadata: {
promptTokenCount: 8,
candidatesTokenCount: 12,
totalTokenCount: 20,
},
modelVersion: model, // Include model version in response
};
},
sendMessageStream: async () => {
// Return a promise that resolves to an async generator
return (async function* (): AsyncGenerator<GoogleGenAIResponse, any, unknown> {
yield {
candidates: [
{
content: {
parts: [{ text: 'Streaming chat response' }],
role: 'model',
},
finishReason: 'stop',
index: 0,
},
],
};
})();
},
};
},
};
}
}