types/responses.ts (92 lines of code) (raw):

/** * @license * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { Content, FunctionCall } from "./content"; import { BlockReason, FinishReason, HarmCategory, HarmProbability, } from "./enums"; import { GroundingMetadata } from "./search-grounding"; /** * Result object returned from generateContent() call. * * @public */ export interface GenerateContentResult { response: EnhancedGenerateContentResponse; } /** * Result object returned from generateContentStream() call. * Iterate over `stream` to get chunks as they come in and/or * use the `response` promise to get the aggregated response when * the stream is done. * * @public */ export interface GenerateContentStreamResult { stream: AsyncGenerator<EnhancedGenerateContentResponse>; response: Promise<EnhancedGenerateContentResponse>; } /** * Response object wrapped with helper methods. * * @public */ export interface EnhancedGenerateContentResponse extends GenerateContentResponse { /** * Returns the text string assembled from all `Part`s of the first candidate * of the response, if available. * Throws if the prompt or candidate was blocked. */ text: () => string; /** * Deprecated: use `functionCalls()` instead. * @deprecated - use `functionCalls()` instead */ functionCall: () => FunctionCall | undefined; /** * Returns function calls found in any `Part`s of the first candidate * of the response, if available. * Throws if the prompt or candidate was blocked. */ functionCalls: () => FunctionCall[] | undefined; } /** * Individual response from {@link GenerativeModel.generateContent} and * {@link GenerativeModel.generateContentStream}. * `generateContentStream()` will return one in each chunk until * the stream is done. * @public */ export interface GenerateContentResponse { /** Candidate responses from the model. */ candidates?: GenerateContentCandidate[]; /** The prompt's feedback related to the content filters. */ promptFeedback?: PromptFeedback; /** Metadata on the generation request's token usage. */ usageMetadata?: UsageMetadata; } /** * Logprobs Result * @public */ export interface LogprobsResult { /** Length = total number of decoding steps. */ topCandidates: TopCandidates[]; /** * Length = total number of decoding steps. * The chosen candidates may or may not be in topCandidates. */ chosenCandidates: LogprobsCandidate[]; } /** * Candidate for the logprobs token and score. * @public */ export interface LogprobsCandidate { /** The candidate's token string value. */ token: string; /** The candidate's token id value. */ tokenID: number; /** The candidate's log probability. */ logProbability: number; } /** * Candidates with top log probabilities at each decoding step */ export interface TopCandidates { /** Sorted by log probability in descending order. */ candidates: LogprobsCandidate[]; } /** * Metadata on the generation request's token usage. * @public */ export interface UsageMetadata { /** Number of tokens in the prompt. */ promptTokenCount: number; /** Total number of tokens across the generated candidates. */ candidatesTokenCount: number; /** Total token count for the generation request (prompt + candidates). */ totalTokenCount: number; /** Total token count in the cached part of the prompt, i.e. in the cached content. */ cachedContentTokenCount?: number; } /** * If the prompt was blocked, this will be populated with `blockReason` and * the relevant `safetyRatings`. * @public */ export interface PromptFeedback { blockReason: BlockReason; safetyRatings: SafetyRating[]; blockReasonMessage?: string; } /** * A candidate returned as part of a {@link GenerateContentResponse}. * @public */ export interface GenerateContentCandidate { index: number; content: Content; finishReason?: FinishReason; finishMessage?: string; safetyRatings?: SafetyRating[]; citationMetadata?: CitationMetadata; /** Average log probability score of the candidate. */ avgLogprobs?: number; /** Log-likelihood scores for the response tokens and top tokens. */ logprobsResult?: LogprobsResult; /** Search grounding metadata. */ groundingMetadata?: GroundingMetadata; } /** * Citation metadata that may be found on a {@link GenerateContentCandidate}. * @public */ export interface CitationMetadata { citationSources: CitationSource[]; } /** * A single citation source. * @public */ export interface CitationSource { startIndex?: number; endIndex?: number; uri?: string; license?: string; } /** * A safety rating associated with a {@link GenerateContentCandidate} * @public */ export interface SafetyRating { category: HarmCategory; probability: HarmProbability; } /** * Response from calling {@link GenerativeModel.countTokens}. * @public */ export interface CountTokensResponse { totalTokens: number; } /** * Response from calling {@link GenerativeModel.embedContent}. * @public */ export interface EmbedContentResponse { embedding: ContentEmbedding; } /** * Response from calling {@link GenerativeModel.batchEmbedContents}. * @public */ export interface BatchEmbedContentsResponse { embeddings: ContentEmbedding[]; } /** * A single content embedding. * @public */ export interface ContentEmbedding { values: number[]; } /** * Details object that may be included in an error response. * @public */ export interface ErrorDetails { "@type"?: string; reason?: string; domain?: string; metadata?: Record<string, unknown>; [key: string]: unknown; }