Skip to content
Source
Sign inSign up

provider.ts

50 lines1.8 KB

1import * as Schema from "effect/Schema";
2import { TrimmedNonEmptyString } from "./baseSchemas.ts";
3import { ThreadId } from "./baseSchemas.ts";
4import {
5 getProviderAttachmentLimitError,
6 PROVIDER_SEND_TURN_MAX_INPUT_CHARS,
7 ChatAttachment,
8} from "./chatAttachment.ts";
9import { ModelSelection } from "./modelSelection.ts";
10import { ProviderInteractionMode } from "./providerPolicy.ts";
11​
12export const ProviderSendTurnInput = Schema.Struct({
13 threadId: ThreadId,
14 /** Internal recovery: permits empty turns only for adapters supporting promptless continuation. */
15 continuation: Schema.optional(Schema.Boolean),
16 input: Schema.optional(
17 TrimmedNonEmptyString.check(Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_INPUT_CHARS)),
18 ),
19 attachments: Schema.optional(
20 Schema.Array(ChatAttachment).check(
21 Schema.makeFilter((attachments) => getProviderAttachmentLimitError(attachments) ?? true),
22 ),
23 ),
24 modelSelection: Schema.optional(ModelSelection),
25 interactionMode: Schema.optional(ProviderInteractionMode),
26});
27export type ProviderSendTurnInput = typeof ProviderSendTurnInput.Type;
28​
29export const ProviderUploadFeedbackInput = Schema.Struct({
30 threadId: ThreadId,
31 reason: Schema.optional(TrimmedNonEmptyString),
32});
33export type ProviderUploadFeedbackInput = typeof ProviderUploadFeedbackInput.Type;
34​
35export const ProviderUploadFeedbackResult = Schema.Struct({
36 feedbackId: TrimmedNonEmptyString,
37});
38export type ProviderUploadFeedbackResult = typeof ProviderUploadFeedbackResult.Type;
39​
40export class ProviderUploadFeedbackError extends Schema.TaggedError<ProviderUploadFeedbackError>()(
41 "ProviderUploadFeedbackError",
42 {
43 threadId: ThreadId,
44 cause: Schema.optional(Schema.Defect()),
45 },
46) {
47 override get message(): string {
48 return `Failed to upload feedback for thread ${this.threadId}.`;
49 }