d25d482dc2
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
Publish CLI Package / publish-npm (push) Has been cancelled
Publish Python SDK / publish-pypi (push) Has been cancelled
Publish TypeScript SDK / publish-npm (push) Has been cancelled
75 lines
1.9 KiB
TypeScript
75 lines
1.9 KiB
TypeScript
import {
|
|
type PersistedStreamEventEnvelope,
|
|
parsePersistedStreamEventEnvelope,
|
|
type SessionStreamEvent,
|
|
} from './contract'
|
|
|
|
type CreateEventBase = {
|
|
chatId?: string
|
|
cursor: string
|
|
requestId: string
|
|
seq: number
|
|
streamId: string
|
|
ts?: string
|
|
}
|
|
|
|
type CreateEventVariant<TEvent extends SessionStreamEvent> = CreateEventBase &
|
|
Pick<TEvent, 'type' | 'payload' | 'scope'>
|
|
|
|
export type CreateEventInput = SessionStreamEvent extends infer TEvent
|
|
? TEvent extends SessionStreamEvent
|
|
? CreateEventVariant<TEvent>
|
|
: never
|
|
: never
|
|
|
|
type CreateEventResult<TInput extends CreateEventInput> = Extract<
|
|
PersistedStreamEventEnvelope,
|
|
{ type: TInput['type']; payload: TInput['payload'] }
|
|
>
|
|
|
|
type StreamEventFromEnvelope<TEnvelope extends PersistedStreamEventEnvelope> = Extract<
|
|
SessionStreamEvent,
|
|
{ type: TEnvelope['type']; payload: TEnvelope['payload'] }
|
|
>
|
|
|
|
export const TOOL_CALL_STATUS = {
|
|
generating: 'generating',
|
|
} as const
|
|
|
|
export function createEvent<TInput extends CreateEventInput>(
|
|
input: TInput
|
|
): CreateEventResult<TInput> {
|
|
const { streamId, chatId, cursor, seq, requestId, type, payload, scope, ts } = input
|
|
|
|
return {
|
|
v: 1,
|
|
type,
|
|
seq,
|
|
ts: ts ?? new Date().toISOString(),
|
|
stream: {
|
|
streamId,
|
|
...(chatId ? { chatId } : {}),
|
|
cursor,
|
|
},
|
|
trace: {
|
|
requestId,
|
|
},
|
|
...(scope ? { scope } : {}),
|
|
payload,
|
|
} as CreateEventResult<TInput>
|
|
}
|
|
|
|
export function isEventRecord(value: unknown): value is PersistedStreamEventEnvelope {
|
|
return parsePersistedStreamEventEnvelope(value).ok
|
|
}
|
|
|
|
export function eventToStreamEvent<TEnvelope extends PersistedStreamEventEnvelope>(
|
|
envelope: TEnvelope
|
|
): StreamEventFromEnvelope<TEnvelope> {
|
|
return {
|
|
type: envelope.type,
|
|
payload: envelope.payload,
|
|
...(envelope.scope ? { scope: envelope.scope } : {}),
|
|
} as StreamEventFromEnvelope<TEnvelope>
|
|
}
|