resources/beta/threads/messages.ts (324 lines of code) (raw):
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
import { APIResource } from "../../../resource.ts";
import { isRequestOptions } from "../../../core.ts";
import * as Core from "../../../core.ts";
import * as MessagesAPI from "./messages.ts";
import * as AssistantsAPI from "../assistants.ts";
import { CursorPage, type CursorPageParams } from "../../../pagination.ts";
export class Messages extends APIResource {
/**
* Create a message.
*/
create(
threadId: string,
body: MessageCreateParams,
options?: Core.RequestOptions,
): Core.APIPromise<Message> {
return this._client.post(`/threads/${threadId}/messages`, {
body,
...options,
headers: { "OpenAI-Beta": "assistants=v2", ...options?.headers },
});
}
/**
* Retrieve a message.
*/
retrieve(
threadId: string,
messageId: string,
options?: Core.RequestOptions,
): Core.APIPromise<Message> {
return this._client.get(`/threads/${threadId}/messages/${messageId}`, {
...options,
headers: { "OpenAI-Beta": "assistants=v2", ...options?.headers },
});
}
/**
* Modifies a message.
*/
update(
threadId: string,
messageId: string,
body: MessageUpdateParams,
options?: Core.RequestOptions,
): Core.APIPromise<Message> {
return this._client.post(`/threads/${threadId}/messages/${messageId}`, {
body,
...options,
headers: { "OpenAI-Beta": "assistants=v2", ...options?.headers },
});
}
/**
* Returns a list of messages for a given thread.
*/
list(
threadId: string,
query?: MessageListParams,
options?: Core.RequestOptions,
): Core.PagePromise<MessagesPage, Message>;
list(
threadId: string,
options?: Core.RequestOptions,
): Core.PagePromise<MessagesPage, Message>;
list(
threadId: string,
query: MessageListParams | Core.RequestOptions = {},
options?: Core.RequestOptions,
): Core.PagePromise<MessagesPage, Message> {
if (isRequestOptions(query)) {
return this.list(threadId, {}, query);
}
return this._client.getAPIList(
`/threads/${threadId}/messages`,
MessagesPage,
{
query,
...options,
headers: { "OpenAI-Beta": "assistants=v2", ...options?.headers },
},
);
}
/**
* Deletes a message.
*/
del(
threadId: string,
messageId: string,
options?: Core.RequestOptions,
): Core.APIPromise<MessageDeleted> {
return this._client.delete(`/threads/${threadId}/messages/${messageId}`, {
...options,
headers: { "OpenAI-Beta": "assistants=v2", ...options?.headers },
});
}
}
export class MessagesPage extends CursorPage<Message> {}
/**
* A citation within the message that points to a specific quote from a specific
* File associated with the assistant or the message. Generated when the assistant
* uses the "file_search" tool to search files.
*/
export type Annotation = FileCitationAnnotation | FilePathAnnotation;
/**
* A citation within the message that points to a specific quote from a specific
* File associated with the assistant or the message. Generated when the assistant
* uses the "file_search" tool to search files.
*/
export type AnnotationDelta =
| FileCitationDeltaAnnotation
| FilePathDeltaAnnotation;
/**
* A citation within the message that points to a specific quote from a specific
* File associated with the assistant or the message. Generated when the assistant
* uses the "file_search" tool to search files.
*/
export interface FileCitationAnnotation {
end_index: number;
file_citation: FileCitationAnnotation.FileCitation;
start_index: number;
/**
* The text in the message content that needs to be replaced.
*/
text: string;
/**
* Always `file_citation`.
*/
type: "file_citation";
}
export namespace FileCitationAnnotation {
export interface FileCitation {
/**
* The ID of the specific File the citation is from.
*/
file_id: string;
}
}
/**
* A citation within the message that points to a specific quote from a specific
* File associated with the assistant or the message. Generated when the assistant
* uses the "file_search" tool to search files.
*/
export interface FileCitationDeltaAnnotation {
/**
* The index of the annotation in the text content part.
*/
index: number;
/**
* Always `file_citation`.
*/
type: "file_citation";
end_index?: number;
file_citation?: FileCitationDeltaAnnotation.FileCitation;
start_index?: number;
/**
* The text in the message content that needs to be replaced.
*/
text?: string;
}
export namespace FileCitationDeltaAnnotation {
export interface FileCitation {
/**
* The ID of the specific File the citation is from.
*/
file_id?: string;
/**
* The specific quote in the file.
*/
quote?: string;
}
}
/**
* A URL for the file that's generated when the assistant used the
* `code_interpreter` tool to generate a file.
*/
export interface FilePathAnnotation {
end_index: number;
file_path: FilePathAnnotation.FilePath;
start_index: number;
/**
* The text in the message content that needs to be replaced.
*/
text: string;
/**
* Always `file_path`.
*/
type: "file_path";
}
export namespace FilePathAnnotation {
export interface FilePath {
/**
* The ID of the file that was generated.
*/
file_id: string;
}
}
/**
* A URL for the file that's generated when the assistant used the
* `code_interpreter` tool to generate a file.
*/
export interface FilePathDeltaAnnotation {
/**
* The index of the annotation in the text content part.
*/
index: number;
/**
* Always `file_path`.
*/
type: "file_path";
end_index?: number;
file_path?: FilePathDeltaAnnotation.FilePath;
start_index?: number;
/**
* The text in the message content that needs to be replaced.
*/
text?: string;
}
export namespace FilePathDeltaAnnotation {
export interface FilePath {
/**
* The ID of the file that was generated.
*/
file_id?: string;
}
}
export interface ImageFile {
/**
* The [File](https://platform.openai.com/docs/api-reference/files) ID of the image
* in the message content. Set `purpose="vision"` when uploading the File if you
* need to later display the file content.
*/
file_id: string;
/**
* Specifies the detail level of the image if specified by the user. `low` uses
* fewer tokens, you can opt in to high resolution using `high`.
*/
detail?: "auto" | "low" | "high";
}
/**
* References an image [File](https://platform.openai.com/docs/api-reference/files)
* in the content of a message.
*/
export interface ImageFileContentBlock {
image_file: ImageFile;
/**
* Always `image_file`.
*/
type: "image_file";
}
export interface ImageFileDelta {
/**
* Specifies the detail level of the image if specified by the user. `low` uses
* fewer tokens, you can opt in to high resolution using `high`.
*/
detail?: "auto" | "low" | "high";
/**
* The [File](https://platform.openai.com/docs/api-reference/files) ID of the image
* in the message content. Set `purpose="vision"` when uploading the File if you
* need to later display the file content.
*/
file_id?: string;
}
/**
* References an image [File](https://platform.openai.com/docs/api-reference/files)
* in the content of a message.
*/
export interface ImageFileDeltaBlock {
/**
* The index of the content part in the message.
*/
index: number;
/**
* Always `image_file`.
*/
type: "image_file";
image_file?: ImageFileDelta;
}
export interface ImageURL {
/**
* The external URL of the image, must be a supported image types: jpeg, jpg, png,
* gif, webp.
*/
url: string;
/**
* Specifies the detail level of the image. `low` uses fewer tokens, you can opt in
* to high resolution using `high`. Default value is `auto`
*/
detail?: "auto" | "low" | "high";
}
/**
* References an image URL in the content of a message.
*/
export interface ImageURLContentBlock {
image_url: ImageURL;
/**
* The type of the content part.
*/
type: "image_url";
}
export interface ImageURLDelta {
/**
* Specifies the detail level of the image. `low` uses fewer tokens, you can opt in
* to high resolution using `high`.
*/
detail?: "auto" | "low" | "high";
/**
* The URL of the image, must be a supported image types: jpeg, jpg, png, gif,
* webp.
*/
url?: string;
}
/**
* References an image URL in the content of a message.
*/
export interface ImageURLDeltaBlock {
/**
* The index of the content part in the message.
*/
index: number;
/**
* Always `image_url`.
*/
type: "image_url";
image_url?: ImageURLDelta;
}
/**
* Represents a message within a
* [thread](https://platform.openai.com/docs/api-reference/threads).
*/
export interface Message {
/**
* The identifier, which can be referenced in API endpoints.
*/
id: string;
/**
* If applicable, the ID of the
* [assistant](https://platform.openai.com/docs/api-reference/assistants) that
* authored this message.
*/
assistant_id: string | null;
/**
* A list of files attached to the message, and the tools they were added to.
*/
attachments: Array<Message.Attachment> | null;
/**
* The Unix timestamp (in seconds) for when the message was completed.
*/
completed_at: number | null;
/**
* The content of the message in array of text and/or images.
*/
content: Array<MessageContent>;
/**
* The Unix timestamp (in seconds) for when the message was created.
*/
created_at: number;
/**
* The Unix timestamp (in seconds) for when the message was marked as incomplete.
*/
incomplete_at: number | null;
/**
* On an incomplete message, details about why the message is incomplete.
*/
incomplete_details: Message.IncompleteDetails | null;
/**
* Set of 16 key-value pairs that can be attached to an object. This can be useful
* for storing additional information about the object in a structured format. Keys
* can be a maximum of 64 characters long and values can be a maxium of 512
* characters long.
*/
metadata: unknown | null;
/**
* The object type, which is always `thread.message`.
*/
object: "thread.message";
/**
* The entity that produced the message. One of `user` or `assistant`.
*/
role: "user" | "assistant";
/**
* The ID of the [run](https://platform.openai.com/docs/api-reference/runs)
* associated with the creation of this message. Value is `null` when messages are
* created manually using the create message or create thread endpoints.
*/
run_id: string | null;
/**
* The status of the message, which can be either `in_progress`, `incomplete`, or
* `completed`.
*/
status: "in_progress" | "incomplete" | "completed";
/**
* The [thread](https://platform.openai.com/docs/api-reference/threads) ID that
* this message belongs to.
*/
thread_id: string;
}
export namespace Message {
export interface Attachment {
/**
* The ID of the file to attach to the message.
*/
file_id?: string;
/**
* The tools to add this file to.
*/
tools?: Array<
| AssistantsAPI.CodeInterpreterTool
| Attachment.AssistantToolsFileSearchTypeOnly
>;
}
export namespace Attachment {
export interface AssistantToolsFileSearchTypeOnly {
/**
* The type of tool being defined: `file_search`
*/
type: "file_search";
}
}
/**
* On an incomplete message, details about why the message is incomplete.
*/
export interface IncompleteDetails {
/**
* The reason the message is incomplete.
*/
reason:
| "content_filter"
| "max_tokens"
| "run_cancelled"
| "run_expired"
| "run_failed";
}
}
/**
* References an image [File](https://platform.openai.com/docs/api-reference/files)
* in the content of a message.
*/
export type MessageContent =
| ImageFileContentBlock
| ImageURLContentBlock
| TextContentBlock
| RefusalContentBlock;
/**
* References an image [File](https://platform.openai.com/docs/api-reference/files)
* in the content of a message.
*/
export type MessageContentDelta =
| ImageFileDeltaBlock
| TextDeltaBlock
| RefusalDeltaBlock
| ImageURLDeltaBlock;
/**
* References an image [File](https://platform.openai.com/docs/api-reference/files)
* in the content of a message.
*/
export type MessageContentPartParam =
| ImageFileContentBlock
| ImageURLContentBlock
| TextContentBlockParam;
export interface MessageDeleted {
id: string;
deleted: boolean;
object: "thread.message.deleted";
}
/**
* The delta containing the fields that have changed on the Message.
*/
export interface MessageDelta {
/**
* The content of the message in array of text and/or images.
*/
content?: Array<MessageContentDelta>;
/**
* The entity that produced the message. One of `user` or `assistant`.
*/
role?: "user" | "assistant";
}
/**
* Represents a message delta i.e. any changed fields on a message during
* streaming.
*/
export interface MessageDeltaEvent {
/**
* The identifier of the message, which can be referenced in API endpoints.
*/
id: string;
/**
* The delta containing the fields that have changed on the Message.
*/
delta: MessageDelta;
/**
* The object type, which is always `thread.message.delta`.
*/
object: "thread.message.delta";
}
/**
* The refusal content generated by the assistant.
*/
export interface RefusalContentBlock {
refusal: string;
/**
* Always `refusal`.
*/
type: "refusal";
}
/**
* The refusal content that is part of a message.
*/
export interface RefusalDeltaBlock {
/**
* The index of the refusal part in the message.
*/
index: number;
/**
* Always `refusal`.
*/
type: "refusal";
refusal?: string;
}
export interface Text {
annotations: Array<Annotation>;
/**
* The data that makes up the text.
*/
value: string;
}
/**
* The text content that is part of a message.
*/
export interface TextContentBlock {
text: Text;
/**
* Always `text`.
*/
type: "text";
}
/**
* The text content that is part of a message.
*/
export interface TextContentBlockParam {
/**
* Text content to be sent to the model
*/
text: string;
/**
* Always `text`.
*/
type: "text";
}
export interface TextDelta {
annotations?: Array<AnnotationDelta>;
/**
* The data that makes up the text.
*/
value?: string;
}
/**
* The text content that is part of a message.
*/
export interface TextDeltaBlock {
/**
* The index of the content part in the message.
*/
index: number;
/**
* Always `text`.
*/
type: "text";
text?: TextDelta;
}
export interface MessageCreateParams {
/**
* The text contents of the message.
*/
content: string | Array<MessageContentPartParam>;
/**
* The role of the entity that is creating the message. Allowed values include:
*
* - `user`: Indicates the message is sent by an actual user and should be used in
* most cases to represent user-generated messages.
* - `assistant`: Indicates the message is generated by the assistant. Use this
* value to insert messages from the assistant into the conversation.
*/
role: "user" | "assistant";
/**
* A list of files attached to the message, and the tools they should be added to.
*/
attachments?: Array<MessageCreateParams.Attachment> | null;
/**
* Set of 16 key-value pairs that can be attached to an object. This can be useful
* for storing additional information about the object in a structured format. Keys
* can be a maximum of 64 characters long and values can be a maxium of 512
* characters long.
*/
metadata?: unknown | null;
}
export namespace MessageCreateParams {
export interface Attachment {
/**
* The ID of the file to attach to the message.
*/
file_id?: string;
/**
* The tools to add this file to.
*/
tools?: Array<AssistantsAPI.CodeInterpreterTool | Attachment.FileSearch>;
}
export namespace Attachment {
export interface FileSearch {
/**
* The type of tool being defined: `file_search`
*/
type: "file_search";
}
}
}
export interface MessageUpdateParams {
/**
* Set of 16 key-value pairs that can be attached to an object. This can be useful
* for storing additional information about the object in a structured format. Keys
* can be a maximum of 64 characters long and values can be a maxium of 512
* characters long.
*/
metadata?: unknown | null;
}
export interface MessageListParams extends CursorPageParams {
/**
* A cursor for use in pagination. `before` is an object ID that defines your place
* in the list. For instance, if you make a list request and receive 100 objects,
* ending with obj_foo, your subsequent call can include before=obj_foo in order to
* fetch the previous page of the list.
*/
before?: string;
/**
* Sort order by the `created_at` timestamp of the objects. `asc` for ascending
* order and `desc` for descending order.
*/
order?: "asc" | "desc";
/**
* Filter messages by the run ID that generated them.
*/
run_id?: string;
}
export namespace Messages {
export type Annotation = MessagesAPI.Annotation;
export type AnnotationDelta = MessagesAPI.AnnotationDelta;
export type FileCitationAnnotation = MessagesAPI.FileCitationAnnotation;
export type FileCitationDeltaAnnotation =
MessagesAPI.FileCitationDeltaAnnotation;
export type FilePathAnnotation = MessagesAPI.FilePathAnnotation;
export type FilePathDeltaAnnotation = MessagesAPI.FilePathDeltaAnnotation;
export type ImageFile = MessagesAPI.ImageFile;
export type ImageFileContentBlock = MessagesAPI.ImageFileContentBlock;
export type ImageFileDelta = MessagesAPI.ImageFileDelta;
export type ImageFileDeltaBlock = MessagesAPI.ImageFileDeltaBlock;
export type ImageURL = MessagesAPI.ImageURL;
export type ImageURLContentBlock = MessagesAPI.ImageURLContentBlock;
export type ImageURLDelta = MessagesAPI.ImageURLDelta;
export type ImageURLDeltaBlock = MessagesAPI.ImageURLDeltaBlock;
export type Message = MessagesAPI.Message;
export type MessageContent = MessagesAPI.MessageContent;
export type MessageContentDelta = MessagesAPI.MessageContentDelta;
export type MessageContentPartParam = MessagesAPI.MessageContentPartParam;
export type MessageDeleted = MessagesAPI.MessageDeleted;
export type MessageDelta = MessagesAPI.MessageDelta;
export type MessageDeltaEvent = MessagesAPI.MessageDeltaEvent;
export type RefusalContentBlock = MessagesAPI.RefusalContentBlock;
export type RefusalDeltaBlock = MessagesAPI.RefusalDeltaBlock;
export type Text = MessagesAPI.Text;
export type TextContentBlock = MessagesAPI.TextContentBlock;
export type TextContentBlockParam = MessagesAPI.TextContentBlockParam;
export type TextDelta = MessagesAPI.TextDelta;
export type TextDeltaBlock = MessagesAPI.TextDeltaBlock;
export import MessagesPage = MessagesAPI.MessagesPage;
export type MessageCreateParams = MessagesAPI.MessageCreateParams;
export type MessageUpdateParams = MessagesAPI.MessageUpdateParams;
export type MessageListParams = MessagesAPI.MessageListParams;
}