@@ -20,15 +20,15 @@ The following examples indicate how this SDK could eventually be used.
20
20
#### Generate text using any suitable model from any provider (most basic example)
21
21
22
22
``` php
23
- $text = Ai ::generateTextResult(
23
+ $text = AiClient ::generateTextResult(
24
24
'Write a 2-verse poem about PHP.'
25
25
)->toText();
26
26
```
27
27
28
28
#### Generate text using a Google model
29
29
30
30
``` php
31
- $text = Ai ::generateTextResult(
31
+ $text = AiClient ::generateTextResult(
32
32
'Write a 2-verse poem about PHP.',
33
33
Google::model('gemini-2.5-flash')
34
34
)->toText();
@@ -37,7 +37,7 @@ $text = Ai::generateTextResult(
37
37
#### Generate multiple text candidates using an Anthropic model
38
38
39
39
``` php
40
- $texts = Ai ::generateTextResult(
40
+ $texts = AiClient ::generateTextResult(
41
41
'Write a 2-verse poem about PHP.',
42
42
Anthropic::model(
43
43
'claude-3.7-sonnet',
@@ -49,13 +49,13 @@ $texts = Ai::generateTextResult(
49
49
#### Generate an image using any suitable OpenAI model
50
50
51
51
``` php
52
- $modelsMetadata = Ai ::defaultRegistry()->findProviderModelsMetadataForSupport(
52
+ $modelsMetadata = AiClient ::defaultRegistry()->findProviderModelsMetadataForSupport(
53
53
'openai',
54
54
AiCapability::IMAGE_GENERATION
55
55
);
56
- $imageFile = Ai ::generateImageResult(
56
+ $imageFile = AiClient ::generateImageResult(
57
57
'Generate an illustration of the PHP elephant in the Carribean sea.',
58
- Ai ::defaultRegistry()->getProviderModel(
58
+ AiClient ::defaultRegistry()->getProviderModel(
59
59
'openai',
60
60
$modelsMetadata[0]->getId()
61
61
)
@@ -65,12 +65,12 @@ $imageFile = Ai::generateImageResult(
65
65
#### Generate an image using any suitable model from any provider
66
66
67
67
``` php
68
- $providerModelsMetadata = Ai ::defaultRegistry()->findModelsMetadataForSupport(
68
+ $providerModelsMetadata = AiClient ::defaultRegistry()->findModelsMetadataForSupport(
69
69
AiCapability::IMAGE_GENERATION
70
70
);
71
- $imageFile = Ai ::generateImageResult(
71
+ $imageFile = AiClient ::generateImageResult(
72
72
'Generate an illustration of the PHP elephant in the Carribean sea.',
73
- Ai ::defaultRegistry()->getProviderModel(
73
+ AiClient ::defaultRegistry()->getProviderModel(
74
74
$providerModelsMetadata[0]->getProvider()->getId(),
75
75
$providerModelsMetadata[0]->getModels()[0]->getId()
76
76
)
@@ -82,12 +82,12 @@ $imageFile = Ai::generateImageResult(
82
82
_ Note: This does effectively the exact same as [ the first code example] ( #generate-text-using-any-suitable-model-from-any-provider-most-basic-example ) , but more verbosely. In other words, if you omit the model parameter, the SDK will do this internally._
83
83
84
84
``` php
85
- $providerModelsMetadata = Ai ::defaultRegistry()->findModelsMetadataForSupport(
85
+ $providerModelsMetadata = AiClient ::defaultRegistry()->findModelsMetadataForSupport(
86
86
AiCapability::TEXT_GENERATION
87
87
);
88
- $text = Ai ::generateTextResult(
88
+ $text = AiClient ::generateTextResult(
89
89
'Write a 2-verse poem about PHP.',
90
- Ai ::defaultRegistry()->getProviderModel(
90
+ AiClient ::defaultRegistry()->getProviderModel(
91
91
$providerModelsMetadata[0]->getProvider()->getId(),
92
92
$providerModelsMetadata[0]->getModels()[0]->getId()
93
93
)
@@ -99,7 +99,7 @@ $text = Ai::generateTextResult(
99
99
_ Note: Since this omits the model parameter, the SDK will automatically determine which models are suitable and use any of them, similar to [ the first code example] ( #generate-text-using-any-suitable-model-from-any-provider-most-basic-example ) . Since it knows the input includes an image, it can internally infer that the model needs to not only support ` AiCapability::TEXT_GENERATION ` , but also ` AiOption::INPUT_MODALITIES => ['text', 'image'] ` ._
100
100
101
101
``` php
102
- $text = Ai ::generateTextResult(
102
+ $text = AiClient ::generateTextResult(
103
103
[
104
104
[
105
105
'text' => 'Generate alternative text for this image.',
@@ -117,7 +117,7 @@ $text = Ai::generateTextResult(
117
117
_ Note: Similarly to the previous example, even without specifying the model here, the SDK will be able to infer required model capabilities because it can detect that multiple chat messages are passed. Therefore it will internally only consider models that support ` AiCapability::TEXT_GENERATION ` as well as ` AiCapability::CHAT_HISTORY ` ._
118
118
119
119
``` php
120
- $text = Ai ::generateTextResult(
120
+ $text = AiClient ::generateTextResult(
121
121
[
122
122
[
123
123
'role' => MessageRole::USER,
@@ -140,17 +140,17 @@ $text = Ai::generateTextResult(
140
140
_ Note: Unlike the previous two examples, to require JSON output it is necessary to go the verbose route, since it is impossible for the SDK to detect whether you require JSON output purely from the prompt input. Therefore this code example contains the logic to manually search for suitable models and then use one of them for the task._
141
141
142
142
``` php
143
- $providerModelsMetadata = Ai ::defaultRegistry()->findModelsMetadataForSupport(
143
+ $providerModelsMetadata = AiClient ::defaultRegistry()->findModelsMetadataForSupport(
144
144
AiCapability::TEXT_GENERATION,
145
145
[
146
146
// Make sure the model supports JSON output as well as following a given schema.
147
147
AiOption::OUTPUT_MIME_TYPE => 'application/json',
148
148
AiOption::OUTPUT_SCHEMA => true,
149
149
]
150
150
);
151
- $jsonString = Ai ::generateTextResult(
151
+ $jsonString = AiClient ::generateTextResult(
152
152
'Transform the following CSV content into a JSON array of row data.',
153
- Ai ::defaultRegistry()->getProviderModel(
153
+ AiClient ::defaultRegistry()->getProviderModel(
154
154
$providerModelsMetadata[0]->getProvider()->getId(),
155
155
$providerModelsMetadata[0]->getModels()[0]->getId(),
156
156
[
@@ -177,16 +177,16 @@ $jsonString = Ai::generateTextResult(
177
177
#### Generate embeddings using any suitable model from any provider
178
178
179
179
``` php
180
- $providerModelsMetadata = Ai ::defaultRegistry()->findModelsMetadataForSupport(
180
+ $providerModelsMetadata = AiClient ::defaultRegistry()->findModelsMetadataForSupport(
181
181
AiCapability::EMBEDDING_GENERATION
182
182
);
183
- $embeddings = Ai ::generateEmbeddingsResult(
183
+ $embeddings = AiClient ::generateEmbeddingsResult(
184
184
[
185
185
'A very long text.',
186
186
'Another very long text.',
187
187
'More long text.',
188
188
],
189
- Ai ::defaultRegistry()->getProviderModel(
189
+ AiClient ::defaultRegistry()->getProviderModel(
190
190
$providerModelsMetadata[0]->getProvider()->getId(),
191
191
$providerModelsMetadata[0]->getModels()[0]->getId()
192
192
)
@@ -214,7 +214,7 @@ config:
214
214
classDiagram
215
215
direction LR
216
216
namespace Ai {
217
- class AiEntrypoint {
217
+ class AiClient {
218
218
+prompt(?string $text) PromptBuilder$
219
219
+message(?string $text) MessageBuilder$
220
220
}
@@ -274,8 +274,8 @@ direction LR
274
274
}
275
275
}
276
276
277
- AiEntrypoint .. PromptBuilder : creates
278
- AiEntrypoint .. MessageBuilder : creates
277
+ AiClient .. PromptBuilder : creates
278
+ AiClient .. MessageBuilder : creates
279
279
```
280
280
281
281
### Overview: Traditional method call API for AI implementers
@@ -291,7 +291,7 @@ config:
291
291
classDiagram
292
292
direction LR
293
293
namespace Ai {
294
- class AiEntrypoint {
294
+ class AiClient {
295
295
+generateResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
296
296
+generateOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
297
297
+generateTextResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
@@ -322,7 +322,7 @@ config:
322
322
classDiagram
323
323
direction LR
324
324
namespace Ai {
325
- class AiEntrypoint {
325
+ class AiClient {
326
326
+defaultRegistry() AiProviderRegistry$
327
327
+isConfigured(AiProviderAvailability $availability) bool$
328
328
}
@@ -339,7 +339,7 @@ direction LR
339
339
}
340
340
}
341
341
342
- AiEntrypoint "1" o-- "1..*" AiProviderRegistry
342
+ AiClient "1" o-- "1..*" AiProviderRegistry
343
343
```
344
344
345
345
### Details: Class diagram for AI implementers
@@ -353,7 +353,7 @@ config:
353
353
classDiagram
354
354
direction LR
355
355
namespace Ai {
356
- class AiEntrypoint {
356
+ class AiClient {
357
357
+prompt(?string $text) PromptBuilder$
358
358
+message(?string $text) MessageBuilder$
359
359
+defaultRegistry() AiProviderRegistry$
@@ -602,14 +602,14 @@ direction LR
602
602
<<Enumeration>> OperationState
603
603
<<Enumeration>> AiModality
604
604
605
- AiEntrypoint .. Message : receives
606
- AiEntrypoint .. MessagePart : receives
607
- AiEntrypoint .. PromptBuilder : creates
608
- AiEntrypoint .. MessageBuilder : creates
609
- AiEntrypoint .. GenerativeAiResult : creates
610
- AiEntrypoint .. EmbeddingResult : creates
611
- AiEntrypoint .. GenerativeAiOperation : creates
612
- AiEntrypoint .. EmbeddingOperation : creates
605
+ AiClient .. Message : receives
606
+ AiClient .. MessagePart : receives
607
+ AiClient .. PromptBuilder : creates
608
+ AiClient .. MessageBuilder : creates
609
+ AiClient .. GenerativeAiResult : creates
610
+ AiClient .. EmbeddingResult : creates
611
+ AiClient .. GenerativeAiOperation : creates
612
+ AiClient .. EmbeddingOperation : creates
613
613
PromptBuilder .. GenerativeAiResult : creates
614
614
PromptBuilder .. EmbeddingResult : creates
615
615
PromptBuilder .. GenerativeAiOperation : creates
0 commit comments