Skip to content

Commit fe53935

Browse files
authored
Merge pull request #10 from WordPress/architecture-revision/fluent-api
Revise proposed architecture PR with fluent API class diagrams
2 parents 3d8e542 + 8fa8b21 commit fe53935

File tree

1 file changed

+171
-26
lines changed

1 file changed

+171
-26
lines changed

docs/ARCHITECTURE.md

Lines changed: 171 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -198,16 +198,83 @@ This section shows comprehensive class diagrams for the proposed architecture. F
198198

199199
**Note:** The class diagrams are also not meant to be comprehensive in terms of any specific configuration keys or parameters which are or will be supported. For now, the relevant definitions don't include any specific parameter names or constants.
200200

201-
### Zoomed out view
201+
### Overview: Fluent API for AI consumption
202202

203-
Below you find the zoomed out overview class diagram, looking at the two entrypoints for the largely decoupled APIs for:
203+
This is a subset of the overall class diagram, purely focused on the fluent API for AI consumption.
204204

205-
- Consuming AI capabilities.
206-
- This is what the vast majority of developers will use.
207-
- Registering and implementing AI providers.
208-
- This is what only developers that implement additional models or custom providers will use.
205+
```mermaid
206+
---
207+
config:
208+
class:
209+
hideEmptyMembersBox: true
210+
---
211+
classDiagram
212+
direction LR
213+
namespace Ai {
214+
class AiEntrypoint {
215+
+prompt(?string $text) PromptBuilder$
216+
+message(?string $text) MessageBuilder$
217+
}
218+
219+
class PromptBuilder {
220+
+withText(string $text) self
221+
+withImageFile(File $file) self
222+
+withAudioFile(File $file) self
223+
+withVideoFile(File $file) self
224+
+withFunctionResponse(FunctionResponse $functionResponse) self
225+
+withMessageParts(...MessagePart $part) self
226+
+withHistory(...Message $messages) self
227+
+usingModel(AiModel $model) self
228+
+usingSystemInstruction(string|MessagePart[]|Message $systemInstruction) self
229+
+usingTemperature(float $temperature) self
230+
+usingTopP(float $topP) self
231+
+usingTopK(int $topK) self
232+
+usingStopSequences(...string $stopSequences) self
233+
+usingCandidateCount(int $candidateCount) self
234+
+usingOutputMime(string $mimeType) self
235+
+usingOutputSchema(array< string, mixed > $schema) self
236+
+usingOutputModalities(...AiModality $modalities) self
237+
+generateResult() GenerativeAiResult
238+
+generateOperation() GenerativeAiOperation
239+
+generateTextResult() GenerativeAiResult
240+
+streamGenerateTextResult() Generator< GenerativeAiResult >
241+
+generateImageResult() GenerativeAiResult
242+
+convertTextToSpeechResult() GenerativeAiResult
243+
+generateSpeechResult() GenerativeAiResult
244+
+generateEmbeddingsResult() EmbeddingResult
245+
+generateTextOperation() GenerativeAiOperation
246+
+generateImageOperation() GenerativeAiOperation
247+
+convertTextToSpeechOperation() GenerativeAiOperation
248+
+generateSpeechOperation() GenerativeAiOperation
249+
+generateEmbeddingsOperation() EmbeddingOperation
250+
+generateText() string
251+
+streamGenerateText() Generator< string >
252+
+generateImage() File
253+
+convertTextToSpeech() File
254+
+generateSpeech() File
255+
+generateEmbeddings() Embedding[]
256+
}
257+
258+
class MessageBuilder {
259+
+usingRole(MessageRole $role) self
260+
+withText(string $text) self
261+
+withImageFile(File $file) self
262+
+withAudioFile(File $file) self
263+
+withVideoFile(File $file) self
264+
+withFunctionCall(FunctionCall $functionCall) self
265+
+withFunctionResponse(FunctionResponse $functionResponse) self
266+
+withMessageParts(...MessagePart $part) self
267+
+get() Message
268+
}
269+
}
270+
271+
AiEntrypoint .. PromptBuilder : creates
272+
AiEntrypoint .. MessageBuilder : creates
273+
```
209274

210-
Zoomed in views with detailed specifications for both of the APIs are found in the subsequent sections.
275+
### Overview: Traditional method call API for AI consumption
276+
277+
This is a subset of the overall class diagram, purely focused on the traditional method call API for AI consumption.
211278

212279
```mermaid
213280
---
@@ -219,23 +286,41 @@ classDiagram
219286
direction LR
220287
namespace Ai {
221288
class AiEntrypoint {
222-
+defaultRegistry() AiProviderRegistry
223-
+isConfigured(AiProviderAvailability $availability) bool$
224289
+generateResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
225290
+generateOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
226291
+generateTextResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
227292
+streamGenerateTextResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) Generator< GenerativeAiResult >$
228293
+generateImageResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
229-
+textToSpeechResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
294+
+convertTextToSpeechResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
230295
+generateSpeechResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
231296
+generateEmbeddingsResult(string[]|Message[] $input, AiModel $model) EmbeddingResult$
232297
+generateTextOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
233298
+generateImageOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
234-
+textToSpeechOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
299+
+convertTextToSpeechOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
235300
+generateSpeechOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
236301
+generateEmbeddingsOperation(string[]|Message[] $input, AiModel $model) EmbeddingOperation$
237302
}
238303
}
304+
```
305+
306+
### Overview: API for provider registration and implementation
307+
308+
This is a subset of the overall class diagram, purely focused on the API for provider registration and implementation.
309+
310+
```mermaid
311+
---
312+
config:
313+
class:
314+
hideEmptyMembersBox: true
315+
---
316+
classDiagram
317+
direction LR
318+
namespace Ai {
319+
class AiEntrypoint {
320+
+defaultRegistry() AiProviderRegistry$
321+
+isConfigured(AiProviderAvailability $availability) bool$
322+
}
323+
}
239324
namespace Ai.Providers {
240325
class AiProviderRegistry {
241326
+registerProvider(string $className) void
@@ -251,7 +336,7 @@ direction LR
251336
AiEntrypoint "1" o-- "1..*" AiProviderRegistry
252337
```
253338

254-
### Class diagram zoomed in on AI consumption
339+
### Details: Class diagram for AI consumption
255340

256341
```mermaid
257342
---
@@ -263,22 +348,75 @@ classDiagram
263348
direction LR
264349
namespace Ai {
265350
class AiEntrypoint {
266-
+defaultRegistry() AiProviderRegistry
351+
+prompt(?string $text) PromptBuilder$
352+
+message(?string $text) MessageBuilder$
353+
+defaultRegistry() AiProviderRegistry$
267354
+isConfigured(AiProviderAvailability $availability) bool$
268355
+generateResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
269356
+generateOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
270357
+generateTextResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
271358
+streamGenerateTextResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) Generator< GenerativeAiResult >$
272359
+generateImageResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
273-
+textToSpeechResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
360+
+convertTextToSpeechResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
274361
+generateSpeechResult(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiResult$
275362
+generateEmbeddingsResult(string[]|Message[] $input, AiModel $model) EmbeddingResult$
276363
+generateTextOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
277364
+generateImageOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
278-
+textToSpeechOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
365+
+convertTextToSpeechOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
279366
+generateSpeechOperation(string|MessagePart|MessagePart[]|Message|Message[] $prompt, AiModel $model) GenerativeAiOperation$
280367
+generateEmbeddingsOperation(string[]|Message[] $input, AiModel $model) EmbeddingOperation$
281368
}
369+
370+
class PromptBuilder {
371+
+withText(string $text) self
372+
+withImageFile(File $file) self
373+
+withAudioFile(File $file) self
374+
+withVideoFile(File $file) self
375+
+withFunctionResponse(FunctionResponse $functionResponse) self
376+
+withMessageParts(...MessagePart $part) self
377+
+withHistory(...Message $messages) self
378+
+usingModel(AiModel $model) self
379+
+usingSystemInstruction(string|MessagePart[]|Message $systemInstruction) self
380+
+usingTemperature(float $temperature) self
381+
+usingTopP(float $topP) self
382+
+usingTopK(int $topK) self
383+
+usingStopSequences(...string $stopSequences) self
384+
+usingCandidateCount(int $candidateCount) self
385+
+usingOutputMime(string $mimeType) self
386+
+usingOutputSchema(array< string, mixed > $schema) self
387+
+usingOutputModalities(...AiModality $modalities) self
388+
+generateResult() GenerativeAiResult
389+
+generateOperation() GenerativeAiOperation
390+
+generateTextResult() GenerativeAiResult
391+
+streamGenerateTextResult() Generator< GenerativeAiResult >
392+
+generateImageResult() GenerativeAiResult
393+
+convertTextToSpeechResult() GenerativeAiResult
394+
+generateSpeechResult() GenerativeAiResult
395+
+generateEmbeddingsResult() EmbeddingResult
396+
+generateTextOperation() GenerativeAiOperation
397+
+generateImageOperation() GenerativeAiOperation
398+
+convertTextToSpeechOperation() GenerativeAiOperation
399+
+generateSpeechOperation() GenerativeAiOperation
400+
+generateEmbeddingsOperation() EmbeddingOperation
401+
+generateText() string
402+
+streamGenerateText() Generator< string >
403+
+generateImage() File
404+
+convertTextToSpeech() File
405+
+generateSpeech() File
406+
+generateEmbeddings() Embedding[]
407+
}
408+
409+
class MessageBuilder {
410+
+usingRole(MessageRole $role) self
411+
+withText(string $text) self
412+
+withImageFile(File $file) self
413+
+withAudioFile(File $file) self
414+
+withVideoFile(File $file) self
415+
+withFunctionCall(FunctionCall $functionCall) self
416+
+withFunctionResponse(FunctionResponse $functionResponse) self
417+
+withMessageParts(...MessagePart $part) self
418+
+get() Message
419+
}
282420
}
283421
namespace Ai.Types {
284422
class Message {
@@ -454,10 +592,17 @@ direction LR
454592
455593
AiEntrypoint .. Message : receives
456594
AiEntrypoint .. MessagePart : receives
595+
AiEntrypoint .. PromptBuilder : creates
596+
AiEntrypoint .. MessageBuilder : creates
457597
AiEntrypoint .. GenerativeAiResult : creates
458598
AiEntrypoint .. EmbeddingResult : creates
459599
AiEntrypoint .. GenerativeAiOperation : creates
460600
AiEntrypoint .. EmbeddingOperation : creates
601+
PromptBuilder .. GenerativeAiResult : creates
602+
PromptBuilder .. EmbeddingResult : creates
603+
PromptBuilder .. GenerativeAiOperation : creates
604+
PromptBuilder .. EmbeddingOperation : creates
605+
MessageBuilder .. Message : creates
461606
Message "1" *-- "1..*" MessagePart
462607
MessagePart "1" o-- "0..1" InlineFile
463608
MessagePart "1" o-- "0..1" RemoteFile
@@ -484,7 +629,7 @@ direction LR
484629
Result <|-- EmbeddingResult
485630
```
486631

487-
### Class diagram zoomed in on AI provider registration and implementation
632+
### Details: Class diagram for AI provider registration and implementation
488633

489634
```mermaid
490635
---
@@ -539,8 +684,8 @@ direction LR
539684
class AiImageGenerationModel {
540685
+generateImageResult(Message[] $prompt) GenerativeAiResult
541686
}
542-
class AiTextToSpeechModel {
543-
+textToSpeechResult(Message[] $prompt) GenerativeAiResult
687+
class AiTextToSpeechConversionModel {
688+
+convertTextToSpeechResult(Message[] $prompt) GenerativeAiResult
544689
}
545690
class AiSpeechGenerationModel {
546691
+generateSpeechResult(Message[] $prompt) GenerativeAiResult
@@ -554,8 +699,8 @@ direction LR
554699
class AiImageGenerationOperationModel {
555700
+generateImageOperation(Message[] $prompt) GenerativeAiOperation
556701
}
557-
class AiTextToSpeechOperationModel {
558-
+textToSpeechOperation(Message[] $prompt) GenerativeAiOperation
702+
class AiTextToSpeechConversionOperationModel {
703+
+convertTextToSpeechOperation(Message[] $prompt) GenerativeAiOperation
559704
}
560705
class AiSpeechGenerationOperationModel {
561706
+generateSpeechOperation(Message[] $prompt) GenerativeAiOperation
@@ -619,7 +764,7 @@ direction LR
619764
}
620765
class ImageGenerationConfig {
621766
}
622-
class TextToSpeechConfig {
767+
class TextToSpeechConversionConfig {
623768
}
624769
class SpeechGenerationConfig {
625770
}
@@ -684,12 +829,12 @@ direction LR
684829
<<interface>> WithEmbeddingOperations
685830
<<interface>> AiTextGenerationModel
686831
<<interface>> AiImageGenerationModel
687-
<<interface>> AiTextToSpeechModel
832+
<<interface>> AiTextToSpeechConversionModel
688833
<<interface>> AiSpeechGenerationModel
689834
<<interface>> AiEmbeddingGenerationModel
690835
<<interface>> AiTextGenerationOperationModel
691836
<<interface>> AiImageGenerationOperationModel
692-
<<interface>> AiTextToSpeechOperationModel
837+
<<interface>> AiTextToSpeechConversionOperationModel
693838
<<interface>> AiSpeechGenerationOperationModel
694839
<<interface>> AiEmbeddingGenerationOperationModel
695840
<<interface>> WithHttpClient
@@ -721,17 +866,17 @@ direction LR
721866
AiModelMetadata ..> AiFeature
722867
AiModel <|-- AiTextGenerationModel
723868
AiModel <|-- AiImageGenerationModel
724-
AiModel <|-- AiTextToSpeechModel
869+
AiModel <|-- AiTextToSpeechConversionModel
725870
AiModel <|-- AiSpeechGenerationModel
726871
AiModel <|-- AiEmbeddingGenerationModel
727872
AiModel <|-- AiTextGenerationOperationModel
728873
AiModel <|-- AiImageGenerationOperationModel
729-
AiModel <|-- AiTextToSpeechOperationModel
874+
AiModel <|-- AiTextToSpeechConversionOperationModel
730875
AiModel <|-- AiSpeechGenerationOperationModel
731876
AiModel <|-- AiEmbeddingGenerationOperationModel
732877
GenerationConfig <|-- TextGenerationConfig
733878
GenerationConfig <|-- ImageGenerationConfig
734-
GenerationConfig <|-- TextToSpeechConfig
879+
GenerationConfig <|-- TextToSpeechConversionConfig
735880
GenerationConfig <|-- SpeechGenerationConfig
736881
GenerationConfig <|-- EmbeddingGenerationConfig
737882
```

0 commit comments

Comments
 (0)