( name: Name, success: Success, failure: Failure )
| 1676 | * @category Schemas |
| 1677 | */ |
| 1678 | export const ToolResultPart = < |
| 1679 | const Name extends string, |
| 1680 | Success extends Schema.Schema.Any, |
| 1681 | Failure extends Schema.Schema.All |
| 1682 | >( |
| 1683 | name: Name, |
| 1684 | success: Success, |
| 1685 | failure: Failure |
| 1686 | ): Schema.Schema< |
| 1687 | ToolResultPart<Name, Schema.Schema.Type<Success>, Schema.Schema.Type<Failure>>, |
| 1688 | ToolResultPartEncoded |
| 1689 | > => { |
| 1690 | const Base = Schema.Struct({ |
| 1691 | id: Schema.String, |
| 1692 | type: Schema.Literal("tool-result"), |
| 1693 | providerName: Schema.optional(Schema.String), |
| 1694 | isFailure: Schema.Boolean |
| 1695 | }) |
| 1696 | const ResultSchema = Schema.Union(success, failure) |
| 1697 | const Encoded = Schema.Struct({ |
| 1698 | ...Base.fields, |
| 1699 | name: Schema.String, |
| 1700 | result: Schema.encodedSchema(ResultSchema), |
| 1701 | providerExecuted: Schema.optional(Schema.Boolean), |
| 1702 | metadata: Schema.optional(ProviderMetadata) |
| 1703 | }) |
| 1704 | const Decoded = Schema.Struct({ |
| 1705 | ...Base.fields, |
| 1706 | [PartTypeId]: Schema.Literal(PartTypeId), |
| 1707 | name: Schema.Literal(name), |
| 1708 | result: Schema.typeSchema(ResultSchema), |
| 1709 | encodedResult: Schema.encodedSchema(ResultSchema), |
| 1710 | providerExecuted: Schema.Boolean, |
| 1711 | metadata: ProviderMetadata |
| 1712 | }) |
| 1713 | const decodeResult = ParseResult.decode<any, any, never>(ResultSchema as any) |
| 1714 | const encodeResult = ParseResult.encode<any, any, never>(ResultSchema as any) |
| 1715 | return Schema.transformOrFail( |
| 1716 | Encoded, |
| 1717 | Decoded, |
| 1718 | { |
| 1719 | strict: true, |
| 1720 | decode: Effect.fnUntraced(function*(encoded) { |
| 1721 | const decoded = yield* decodeResult(encoded.result) |
| 1722 | const providerExecuted = encoded.providerExecuted ?? false |
| 1723 | return { |
| 1724 | ...encoded, |
| 1725 | [PartTypeId]: PartTypeId, |
| 1726 | name: encoded.name as Name, |
| 1727 | result: decoded, |
| 1728 | encodedResult: encoded.result as any, |
| 1729 | metadata: encoded.metadata ?? {}, |
| 1730 | providerExecuted |
| 1731 | } as const |
| 1732 | }), |
| 1733 | encode: Effect.fnUntraced(function*(decoded) { |
| 1734 | const encoded = yield* encodeResult(decoded.result) |
| 1735 | return { |
no test coverage detected