95 lines · 3.3 KB · TypeScript
RawDownload
import * as Schema from "effect/Schema"; import { ChatAttachment, OrchestrationMessageRole } from "./orchestration.ts";import {  IsoDateTime,  MessageId,  NonNegativeInt,  ProjectId,  ThreadId,  TrimmedNonEmptyString,} from "./baseSchemas.ts"; export const THREAD_REFERENCE_DEFAULT_MAX_CHARS = 40_000;export const THREAD_REFERENCE_MAX_CHARS = 80_000; export const ThreadReferenceCursor = Schema.String.check(  Schema.isPattern(/^\d+:\d+$/, {    description: "Opaque transcript cursor returned by a previous thread_read call.",  }),);export type ThreadReferenceCursor = typeof ThreadReferenceCursor.Type; export const ThreadReferenceReadInput = Schema.Struct({  threadId: ThreadId.annotate({    description:      "Referenced thread id. Prefer the final THREAD_ID path segment; full t3-thread:///ENVIRONMENT_ID/THREAD_ID links and ENVIRONMENT_ID/THREAD_ID are also accepted.",  }),  cursor: Schema.optional(ThreadReferenceCursor).annotate({    description: "nextCursor from the previous page. Omit for the first page.",  }),  maxChars: Schema.optional(    Schema.Int.check(Schema.isGreaterThanOrEqualTo(1_000))      .check(Schema.isLessThanOrEqualTo(THREAD_REFERENCE_MAX_CHARS))      .annotate({        description: `Maximum message-text characters to return. Defaults to ${THREAD_REFERENCE_DEFAULT_MAX_CHARS}; maximum ${THREAD_REFERENCE_MAX_CHARS}.`,      }),  ),});export type ThreadReferenceReadInput = typeof ThreadReferenceReadInput.Type; export const ThreadReferenceTranscriptMessage = Schema.Struct({  id: MessageId,  role: OrchestrationMessageRole,  text: Schema.String,  textStart: NonNegativeInt,  textEnd: NonNegativeInt,  textComplete: Schema.Boolean,  attachments: Schema.Array(ChatAttachment),  createdAt: IsoDateTime,});export type ThreadReferenceTranscriptMessage = typeof ThreadReferenceTranscriptMessage.Type; export const ThreadReferenceReadResult = Schema.Struct({  threadId: ThreadId,  projectId: ProjectId,  title: TrimmedNonEmptyString,  messages: Schema.Array(ThreadReferenceTranscriptMessage),  totalMessages: NonNegativeInt,  nextCursor: Schema.NullOr(ThreadReferenceCursor),});export type ThreadReferenceReadResult = typeof ThreadReferenceReadResult.Type; export class ThreadReferenceNotFoundError extends Schema.TaggedErrorClass<ThreadReferenceNotFoundError>()(  "ThreadReferenceNotFoundError",  { threadId: ThreadId },) {  override get message(): string {    return `Referenced thread '${this.threadId}' was not found.`;  }} export class ThreadReferenceInvalidCursorError extends Schema.TaggedErrorClass<ThreadReferenceInvalidCursorError>()(  "ThreadReferenceInvalidCursorError",  { threadId: ThreadId, cursor: Schema.String },) {  override get message(): string {    return `Cursor '${this.cursor}' is invalid for referenced thread '${this.threadId}'.`;  }} export class ThreadReferenceUnavailableError extends Schema.TaggedErrorClass<ThreadReferenceUnavailableError>()(  "ThreadReferenceUnavailableError",  { threadId: ThreadId, cause: Schema.optional(Schema.Defect()) },) {  override get message(): string {    return `Referenced thread '${this.threadId}' could not be read.`;  }} export const ThreadReferenceReadError = Schema.Union([  ThreadReferenceNotFoundError,  ThreadReferenceInvalidCursorError,  ThreadReferenceUnavailableError,]);export type ThreadReferenceReadError = typeof ThreadReferenceReadError.Type;