1
type Probability = 'NEGLIGIBLE' | 'LOW' | 'MEDIUM' | 'HIGH';
3
interface SafetyRating {
5
| 'HARM_CATEGORY_HARASSMENT'
6
| 'HARM_CATEGORY_HATE_SPEECH'
7
| 'HARM_CATEGORY_SEXUALLY_EXPLICIT'
8
| 'HARM_CATEGORY_DANGEROUS_CONTENT';
9
probability: Probability;
16
interface PartFunctionCall {
19
args: Record<string, string>;
23
type Part = PartText | PartFunctionCall;
32
finishReason?: 'FINISH_REASON_STOP' | 'STOP';
33
safetyRatings: SafetyRating[];
36
interface GeminiUsageMetadata {
37
promptTokenCount: number;
38
candidatesTokenCount?: number;
39
totalTokenCount: number;
42
export interface GeminiErrorResponse {
50
export interface GeminiResponseData {
51
candidates: Candidate[];
52
usageMetadata?: GeminiUsageMetadata;
55
export type GeminiApiResponse = (GeminiResponseData | GeminiErrorResponse)[];
57
export interface Palm2ApiResponse {
73
export function maybeCoerceToGeminiFormat(contents: any) {
75
if (Array.isArray(contents) && typeof contents[0].content === 'string') {
76
// This looks like an OpenAI chat prompt. Convert it to a compatible format
80
text: contents.map((item) => item.content).join(''),
85
return { contents, coerced };