PluginProbe
ZIP AI – AI Website Builder & AI Agent (Beta) / trunk
ZIP AI – AI Website Builder & AI Agent (Beta) vtrunk
0.0.10 0.0.9 trunk 0.0.4 0.0.5 0.0.6 0.0.7 0.0.8
zip-ai / lib / php-mcp-schema / src / Client / Sampling / DTO / SamplingMessage.php

SamplingMessage.php in ZIP AI – AI Website Builder & AI Agent (Beta) trunk, at lib/php-mcp-schema/src/Client/Sampling/DTO/SamplingMessage.php

138 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 declare(strict_types=1);
4
5 namespace WP\McpSchema\Client\Sampling\DTO;
6
7 use WP\McpSchema\Common\AbstractDataTransferObject;
8 use WP\McpSchema\Common\Protocol\Factory\SamplingMessageContentBlockFactory;
9 use WP\McpSchema\Common\Traits\ValidatesRequiredFields;
10
11 /**
12 * Describes a message issued to or received from an LLM API.
13 *
14 * @since 2024-11-05
15 * @last-updated 2025-11-25 (added properties: _meta; modified properties: content, role)
16 *
17 * @mcp-domain Client
18 * @mcp-subdomain Sampling
19 * @mcp-version 2025-11-25
20 */
21 class SamplingMessage extends AbstractDataTransferObject
22 {
23 use ValidatesRequiredFields;
24
25 /**
26 * @since 2024-11-05
27 *
28 * @var 'user'|'assistant'
29 */
30 protected string $role;
31
32 /**
33 * @since 2024-11-05
34 *
35 * @var array<\WP\McpSchema\Common\Protocol\Union\SamplingMessageContentBlockInterface|\WP\McpSchema\Common\Protocol\Union\SamplingMessageContentBlockInterface>
36 */
37 protected array $content;
38
39 /**
40 * See [General fields: `_meta`](/specification/2025-11-25/basic/index#meta) for notes on `_meta` usage.
41 *
42 * @since 2025-11-25
43 *
44 * @var array<string, mixed>|null
45 */
46 protected ?array $_meta;
47
48 /**
49 * @param 'user'|'assistant' $role @since 2024-11-05
50 * @param array<\WP\McpSchema\Common\Protocol\Union\SamplingMessageContentBlockInterface|\WP\McpSchema\Common\Protocol\Union\SamplingMessageContentBlockInterface> $content @since 2024-11-05
51 * @param array<string, mixed>|null $_meta @since 2025-11-25
52 */
53 public function __construct(
54 string $role,
55 array $content,
56 ?array $_meta = null
57 ) {
58 $this->role = $role;
59 $this->content = $content;
60 $this->_meta = $_meta;
61 }
62
63 /**
64 * Creates an instance from an array.
65 *
66 * @param array{
67 * role: 'user'|'assistant',
68 * content: array<\WP\McpSchema\Common\Protocol\Union\SamplingMessageContentBlockInterface|\WP\McpSchema\Common\Protocol\Union\SamplingMessageContentBlockInterface>,
69 * _meta?: array<string, mixed>|null
70 * } $data
71 * @phpstan-param array<string, mixed> $data
72 * @return self
73 */
74 public static function fromArray(array $data): self
75 {
76 self::assertRequired($data, ['role', 'content']);
77
78 /** @var 'user'|'assistant' $role */
79 $role = self::asString($data['role']);
80
81 /** @var array<\WP\McpSchema\Common\Protocol\Union\SamplingMessageContentBlockInterface|\WP\McpSchema\Common\Protocol\Union\SamplingMessageContentBlockInterface> $content */
82 $content = array_map(
83 static fn($item) => is_array($item)
84 ? SamplingMessageContentBlockFactory::fromArray($item)
85 : $item,
86 self::asArray($data['content'])
87 );
88
89 return new self(
90 $role,
91 $content,
92 self::asArrayOrNull($data['_meta'] ?? null)
93 );
94 }
95
96 /**
97 * Converts the instance to an array.
98 *
99 * @return array<string, mixed>
100 */
101 public function toArray(): array
102 {
103 $result = [];
104
105 $result['role'] = $this->role;
106 $result['content'] = array_map(static fn($item) => (is_object($item) && method_exists($item, 'toArray')) ? $item->toArray() : $item, $this->content);
107 if ($this->_meta !== null) {
108 $result['_meta'] = $this->_meta;
109 }
110
111 return $result;
112 }
113
114 /**
115 * @return 'user'|'assistant'
116 */
117 public function getRole(): string
118 {
119 return $this->role;
120 }
121
122 /**
123 * @return array<\WP\McpSchema\Common\Protocol\Union\SamplingMessageContentBlockInterface|\WP\McpSchema\Common\Protocol\Union\SamplingMessageContentBlockInterface>
124 */
125 public function getContent(): array
126 {
127 return $this->content;
128 }
129
130 /**
131 * @return array<string, mixed>|null
132 */
133 public function get_meta(): ?array
134 {
135 return $this->_meta;
136 }
137 }
138