|
84 | 84 | use Symfony\AI\Store\Indexer; |
85 | 85 | use Symfony\AI\Store\IndexerInterface; |
86 | 86 | use Symfony\AI\Store\StoreInterface; |
| 87 | +use Symfony\AI\Voice\Bridge\ElevenLabs\VoiceProvider as ElevenLabsVoiceProvider; |
| 88 | +use Symfony\AI\Voice\VoiceProviderInterface; |
87 | 89 | use Symfony\Component\Clock\ClockInterface; |
88 | 90 | use Symfony\Component\Config\Definition\Configurator\DefinitionConfigurator; |
89 | 91 | use Symfony\Component\DependencyInjection\Attribute\Target; |
@@ -184,6 +186,10 @@ public function loadExtension(array $config, ContainerConfigurator $container, C |
184 | 186 | $builder->removeDefinition('ai.command.drop_message_store'); |
185 | 187 | } |
186 | 188 |
|
| 189 | + foreach ($config['voice'] as $voiceProvider => $provider) { |
| 190 | + $this->processVoiceProviderConfig($voiceProvider, $provider, $builder); |
| 191 | + } |
| 192 | + |
187 | 193 | foreach ($config['vectorizer'] ?? [] as $vectorizerName => $vectorizer) { |
188 | 194 | $this->processVectorizerConfig($vectorizerName, $vectorizer, $builder); |
189 | 195 | } |
@@ -754,8 +760,9 @@ private function processAgentConfig(string $name, array $config, ContainerBuilde |
754 | 760 | $agentDefinition |
755 | 761 | ->setArgument(2, []) // placeholder until ProcessorCompilerPass process. |
756 | 762 | ->setArgument(3, []) // placeholder until ProcessorCompilerPass process. |
757 | | - ->setArgument(4, $name) |
758 | | - ->setArgument(5, new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)) |
| 763 | + ->setArgument(4, []) // placeholder until VoiceProviderCompilerPass process. |
| 764 | + ->setArgument(5, $name) |
| 765 | + ->setArgument(6, new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)) |
759 | 766 | ; |
760 | 767 |
|
761 | 768 | $container->setDefinition($agentId, $agentDefinition); |
@@ -1396,6 +1403,30 @@ private function processMessageStoreConfig(string $type, array $messageStores, C |
1396 | 1403 | } |
1397 | 1404 | } |
1398 | 1405 |
|
| 1406 | + /** |
| 1407 | + * @param array<string, mixed> $providers |
| 1408 | + */ |
| 1409 | + private function processVoiceProviderConfig(string $name, array $providers, ContainerBuilder $container): void |
| 1410 | + { |
| 1411 | + if ('eleven_labs' === $name) { |
| 1412 | + foreach ($providers as $type => $config) { |
| 1413 | + $definition = new Definition(ElevenLabsVoiceProvider::class); |
| 1414 | + $definition |
| 1415 | + ->setLazy(true) |
| 1416 | + ->setArguments([ |
| 1417 | + new Reference('ai.platform.eleven_labs'), |
| 1418 | + $config['model'], |
| 1419 | + ]) |
| 1420 | + ->addTag('proxy', ['interface' => VoiceProviderInterface::class]) |
| 1421 | + ->addTag('ai.voice.provider'); |
| 1422 | + |
| 1423 | + $container->setDefinition('ai.voice.eleven_labs.'.$name, $definition); |
| 1424 | + $container->registerAliasForArgument('ai.voice.'.$type.'.'.$name, VoiceProviderInterface::class, $name); |
| 1425 | + $container->registerAliasForArgument('ai.voice.'.$type.'.'.$name, VoiceProviderInterface::class, $type.'_'.$name); |
| 1426 | + } |
| 1427 | + } |
| 1428 | + } |
| 1429 | + |
1399 | 1430 | /** |
1400 | 1431 | * @param array<string, mixed> $config |
1401 | 1432 | */ |
|
0 commit comments