(value: unknown)
| 121 | * with a clear error on a malformed request. |
| 122 | */ |
| 123 | export function parseContainerRunRequest(value: unknown): ContainerRunRequest { |
| 124 | if (!isRecord(value)) { |
| 125 | throw new Error('run request must be a JSON object') |
| 126 | } |
| 127 | const runId = requireNonEmptyString(value, 'runId') |
| 128 | const threadId = requireNonEmptyString(value, 'threadId') |
| 129 | const model = requireNonEmptyString(value, 'model') |
| 130 | const toolExecUrl = requireNonEmptyString(value, 'toolExecUrl') |
| 131 | const toolExecToken = requireNonEmptyString(value, 'toolExecToken') |
| 132 | |
| 133 | const messages = value['messages'] |
| 134 | if ( |
| 135 | !Array.isArray(messages) || |
| 136 | messages.length === 0 || |
| 137 | !messages.every(isModelMessage) |
| 138 | ) { |
| 139 | throw new Error('run request: messages must be a non-empty ModelMessage[]') |
| 140 | } |
| 141 | |
| 142 | const harness = value['harness'] |
| 143 | if (!isHarnessId(harness)) { |
| 144 | throw new Error('run request: harness must be a known harness id') |
| 145 | } |
| 146 | |
| 147 | const workspace = value['workspace'] |
| 148 | if (!isWorkspaceDefinition(workspace)) { |
| 149 | throw new Error('run request: workspace must be a WorkspaceDefinition') |
| 150 | } |
| 151 | |
| 152 | const toolDescriptors = value['toolDescriptors'] |
| 153 | if ( |
| 154 | !Array.isArray(toolDescriptors) || |
| 155 | !toolDescriptors.every(isToolDescriptor) |
| 156 | ) { |
| 157 | throw new Error('run request: toolDescriptors must be a ToolDescriptor[]') |
| 158 | } |
| 159 | |
| 160 | return { |
| 161 | runId, |
| 162 | threadId, |
| 163 | messages, |
| 164 | harness, |
| 165 | model, |
| 166 | workspace, |
| 167 | toolDescriptors, |
| 168 | toolExecUrl, |
| 169 | toolExecToken, |
| 170 | } |
| 171 | } |
no test coverage detected