Skip to content

Commit 7b43743

Browse files
committed
minor #1019 Improvements on bundle for ElevenLabs (Guikingone)
This PR was merged into the main branch. Discussion ---------- Improvements on bundle for `ElevenLabs` | Q | A | ------------- | --- | Bug fix? | no | New feature? | no | Docs? | yes | Issues | -- | License | MIT Commits ------- bb9e4cf refactor(platform): improvements on bundle for ElevenLabs
2 parents d61bbc3 + bb9e4cf commit 7b43743

File tree

3 files changed

+133
-10
lines changed

3 files changed

+133
-10
lines changed

src/ai-bundle/config/options.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,12 @@
9090
->end()
9191
->end()
9292
->end()
93-
->arrayNode('eleven_labs')
93+
->arrayNode('elevenlabs')
9494
->children()
95-
->stringNode('host')->end()
9695
->stringNode('api_key')->isRequired()->end()
96+
->stringNode('host')
97+
->defaultValue('https://api.elevenlabs.io/v1')
98+
->end()
9799
->stringNode('http_client')
98100
->defaultValue('http_client')
99101
->info('Service ID of the HTTP client to use')

src/ai-bundle/src/AiBundle.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -416,23 +416,23 @@ private function processPlatformConfig(string $type, array $platform, ContainerB
416416
return;
417417
}
418418

419-
if ('eleven_labs' === $type) {
420-
$platformId = 'ai.platform.eleven_labs';
419+
if ('elevenlabs' === $type) {
421420
$definition = (new Definition(Platform::class))
422421
->setFactory(ElevenLabsPlatformFactory::class.'::create')
423422
->setLazy(true)
424-
->addTag('proxy', ['interface' => PlatformInterface::class])
425423
->setArguments([
426424
$platform['api_key'],
427425
$platform['host'],
428426
new Reference($platform['http_client'], ContainerInterface::NULL_ON_INVALID_REFERENCE),
429-
new Reference('ai.platform.model_catalog.elevenlabs'),
427+
new Reference('ai.platform.model_catalog.'.$type),
430428
null,
431429
new Reference('event_dispatcher'),
432430
])
433-
->addTag('ai.platform', ['name' => 'eleven_labs']);
431+
->addTag('proxy', ['interface' => PlatformInterface::class])
432+
->addTag('ai.platform', ['name' => $type]);
434433

435-
$container->setDefinition($platformId, $definition);
434+
$container->setDefinition('ai.platform.'.$type, $definition);
435+
$container->registerAliasForArgument('ai.platform.'.$type, PlatformInterface::class, $type);
436436

437437
return;
438438
}

src/ai-bundle/tests/DependencyInjection/AiBundleTest.php

Lines changed: 123 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
use Symfony\AI\Chat\ChatInterface;
2727
use Symfony\AI\Chat\ManagedStoreInterface as ManagedMessageStoreInterface;
2828
use Symfony\AI\Chat\MessageStoreInterface;
29+
use Symfony\AI\Platform\Bridge\ElevenLabs\PlatformFactory;
2930
use Symfony\AI\Platform\Bridge\Ollama\OllamaApiCatalog;
3031
use Symfony\AI\Platform\Capability;
3132
use Symfony\AI\Platform\Model;
33+
use Symfony\AI\Platform\PlatformInterface;
3234
use Symfony\AI\Store\Bridge\Azure\SearchStore as AzureStore;
3335
use Symfony\AI\Store\Bridge\ChromaDb\Store as ChromaDbStore;
3436
use Symfony\AI\Store\Bridge\ClickHouse\Store as ClickhouseStore;
@@ -1576,6 +1578,125 @@ public function testToolboxWithoutExplicitToolsDefined()
15761578
$this->assertTrue($foundOutput, 'Default tool processor should have output tag with full agent ID');
15771579
}
15781580

1581+
public function testElevenLabsPlatformCanBeRegistered()
1582+
{
1583+
$container = $this->buildContainer([
1584+
'ai' => [
1585+
'platform' => [
1586+
'elevenlabs' => [
1587+
'api_key' => 'foo',
1588+
],
1589+
],
1590+
],
1591+
]);
1592+
1593+
$this->assertTrue($container->hasDefinition('ai.platform.elevenlabs'));
1594+
1595+
$definition = $container->getDefinition('ai.platform.elevenlabs');
1596+
1597+
$this->assertTrue($definition->isLazy());
1598+
$this->assertSame([PlatformFactory::class, 'create'], $definition->getFactory());
1599+
1600+
$this->assertCount(6, $definition->getArguments());
1601+
$this->assertSame('foo', $definition->getArgument(0));
1602+
$this->assertSame('https://api.elevenlabs.io/v1', $definition->getArgument(1));
1603+
$this->assertInstanceOf(Reference::class, $definition->getArgument(2));
1604+
$this->assertSame('http_client', (string) $definition->getArgument(2));
1605+
$this->assertInstanceOf(Reference::class, $definition->getArgument(3));
1606+
$this->assertSame('ai.platform.model_catalog.elevenlabs', (string) $definition->getArgument(3));
1607+
$this->assertNull($definition->getArgument(4));
1608+
$this->assertInstanceOf(Reference::class, $definition->getArgument(5));
1609+
$this->assertSame('event_dispatcher', (string) $definition->getArgument(5));
1610+
1611+
$this->assertTrue($definition->hasTag('proxy'));
1612+
$this->assertSame([['interface' => PlatformInterface::class]], $definition->getTag('proxy'));
1613+
$this->assertTrue($definition->hasTag('ai.platform'));
1614+
$this->assertSame([['name' => 'elevenlabs']], $definition->getTag('ai.platform'));
1615+
1616+
$this->assertTrue($container->hasAlias('Symfony\AI\Platform\PlatformInterface $elevenlabs'));
1617+
$this->assertTrue($container->hasAlias('Symfony\AI\Platform\PlatformInterface'));
1618+
}
1619+
1620+
public function testElevenLabsPlatformWithCustomEndpointCanBeRegistered()
1621+
{
1622+
$container = $this->buildContainer([
1623+
'ai' => [
1624+
'platform' => [
1625+
'elevenlabs' => [
1626+
'api_key' => 'foo',
1627+
'host' => 'https://api.elevenlabs.io/v2',
1628+
],
1629+
],
1630+
],
1631+
]);
1632+
1633+
$this->assertTrue($container->hasDefinition('ai.platform.elevenlabs'));
1634+
1635+
$definition = $container->getDefinition('ai.platform.elevenlabs');
1636+
1637+
$this->assertTrue($definition->isLazy());
1638+
$this->assertSame([PlatformFactory::class, 'create'], $definition->getFactory());
1639+
1640+
$this->assertCount(6, $definition->getArguments());
1641+
$this->assertSame('foo', $definition->getArgument(0));
1642+
$this->assertSame('https://api.elevenlabs.io/v2', $definition->getArgument(1));
1643+
$this->assertInstanceOf(Reference::class, $definition->getArgument(2));
1644+
$this->assertSame('http_client', (string) $definition->getArgument(2));
1645+
$this->assertInstanceOf(Reference::class, $definition->getArgument(3));
1646+
$this->assertSame('ai.platform.model_catalog.elevenlabs', (string) $definition->getArgument(3));
1647+
$this->assertNull($definition->getArgument(4));
1648+
$this->assertInstanceOf(Reference::class, $definition->getArgument(5));
1649+
$this->assertSame('event_dispatcher', (string) $definition->getArgument(5));
1650+
1651+
$this->assertTrue($definition->hasTag('proxy'));
1652+
$this->assertSame([['interface' => PlatformInterface::class]], $definition->getTag('proxy'));
1653+
$this->assertTrue($definition->hasTag('ai.platform'));
1654+
$this->assertSame([['name' => 'elevenlabs']], $definition->getTag('ai.platform'));
1655+
1656+
$this->assertTrue($container->hasAlias('Symfony\AI\Platform\PlatformInterface $elevenlabs'));
1657+
$this->assertTrue($container->hasAlias('Symfony\AI\Platform\PlatformInterface'));
1658+
}
1659+
1660+
public function testElevenLabsPlatformWithCustomHttpClientCanBeRegistered()
1661+
{
1662+
$container = $this->buildContainer([
1663+
'ai' => [
1664+
'platform' => [
1665+
'elevenlabs' => [
1666+
'api_key' => 'foo',
1667+
'http_client' => 'foo',
1668+
],
1669+
],
1670+
],
1671+
]);
1672+
1673+
$this->assertTrue($container->hasDefinition('ai.platform.elevenlabs'));
1674+
1675+
$definition = $container->getDefinition('ai.platform.elevenlabs');
1676+
1677+
$this->assertTrue($definition->isLazy());
1678+
$this->assertSame([PlatformFactory::class, 'create'], $definition->getFactory());
1679+
1680+
$this->assertCount(6, $definition->getArguments());
1681+
$this->assertSame('foo', $definition->getArgument(0));
1682+
$this->assertSame('https://api.elevenlabs.io/v1', $definition->getArgument(1));
1683+
$this->assertInstanceOf(Reference::class, $definition->getArgument(2));
1684+
$this->assertSame('foo', (string) $definition->getArgument(2));
1685+
$this->assertInstanceOf(Reference::class, $definition->getArgument(3));
1686+
$this->assertSame('ai.platform.model_catalog.elevenlabs', (string) $definition->getArgument(3));
1687+
$this->assertNull($definition->getArgument(4));
1688+
$this->assertInstanceOf(Reference::class, $definition->getArgument(5));
1689+
$this->assertSame('event_dispatcher', (string) $definition->getArgument(5));
1690+
1691+
$this->assertTrue($definition->hasTag('proxy'));
1692+
$this->assertSame([['interface' => PlatformInterface::class]], $definition->getTag('proxy'));
1693+
$this->assertTrue($definition->hasTag('ai.platform'));
1694+
$this->assertSame([['name' => 'elevenlabs']], $definition->getTag('ai.platform'));
1695+
1696+
$this->assertTrue($container->hasAlias('Symfony\AI\Platform\PlatformInterface $elevenlabs'));
1697+
$this->assertTrue($container->hasAlias('Symfony\AI\Platform\PlatformInterface'));
1698+
}
1699+
15791700
#[TestDox('Token usage processor tags use the correct agent ID')]
15801701
public function testTokenUsageProcessorTags()
15811702
{
@@ -4536,9 +4657,9 @@ private function getFullConfig(): array
45364657
'version' => '2025-04-16',
45374658
'http_client' => 'http_client',
45384659
],
4539-
'eleven_labs' => [
4660+
'elevenlabs' => [
45404661
'host' => 'https://api.elevenlabs.io/v1',
4541-
'api_key' => 'eleven_labs_key_full',
4662+
'api_key' => 'elevenlabs_key_full',
45424663
],
45434664
'gemini' => [
45444665
'api_key' => 'gemini_key_full',

0 commit comments

Comments
 (0)