Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
125 changes: 124 additions & 1 deletion src/platform/src/Bridge/AiMlApi/ModelCatalog.php

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/platform/src/Bridge/Albert/ApiClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,6 @@ public function getModels(): array
'auth_bearer' => $this->apiKey,
]);

return array_map(static fn (array $model) => new Model($model['id']), $result->toArray()['data']);
return array_map(static fn (array $model) => new Model($model['id'], $model['id']), $result->toArray()['data']);
}
}
6 changes: 5 additions & 1 deletion src/platform/src/Bridge/Albert/ModelCatalog.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,14 @@
final class ModelCatalog extends AbstractModelCatalog
{
/**
* @param array<string, array{class: class-string<Model>, capabilities: list<Capability>}> $additionalModels
* @param array<string, array{class: class-string<Model>, label: string, capabilities: list<Capability>}> $additionalModels
*/
public function __construct(array $additionalModels = [])
{
$defaultModels = [
'openweight-small' => [
'class' => CompletionsModel::class,
'label' => 'Openweight Small',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::OUTPUT_TEXT,
Expand All @@ -38,6 +39,7 @@ public function __construct(array $additionalModels = [])
],
'openweight-medium' => [
'class' => CompletionsModel::class,
'label' => 'Openweight Medium',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::OUTPUT_TEXT,
Expand All @@ -46,6 +48,7 @@ public function __construct(array $additionalModels = [])
],
'openweight-large' => [
'class' => CompletionsModel::class,
'label' => 'Openweight Large',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::OUTPUT_TEXT,
Expand All @@ -54,6 +57,7 @@ public function __construct(array $additionalModels = [])
],
'openweight-embeddings' => [
'class' => EmbeddingsModel::class,
'label' => 'Openweight Embeddings (Embeddings)',
'capabilities' => [Capability::INPUT_TEXT, Capability::EMBEDDINGS],
],
];
Expand Down
52 changes: 50 additions & 2 deletions src/platform/src/Bridge/AmazeeAi/ModelApiCatalog.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public function getModel(string $modelName): Model
}

/**
* @return array<string, array{class: class-string, capabilities: list<Capability>}>
* @return array<string, array{class: class-string, label: string, capabilities: list<Capability>}>
*/
public function getModels(): array
{
Expand All @@ -66,7 +66,7 @@ private function preloadRemoteModels(): void
}

/**
* @return iterable<string, array{class: class-string<Model>, capabilities: list<Capability>}>
* @return iterable<string, array{class: class-string<Model>, label: string, capabilities: list<Capability>}>
*/
private function fetchRemoteModels(): iterable
{
Expand All @@ -85,20 +85,68 @@ private function fetchRemoteModels(): iterable
$info = $modelInfo['model_info'] ?? [];
$mode = $info['mode'] ?? null;

$label = $this->inferLabel($name, $modelInfo);

if ('embedding' === $mode) {
yield $name => [
'class' => EmbeddingsModel::class,
'label' => $label,
'capabilities' => $this->buildEmbeddingCapabilities($info),
];
} else {
yield $name => [
'class' => CompletionsModel::class,
'label' => $label,
'capabilities' => $this->buildCompletionsCapabilities($info),
];
}
}
}

private function inferLabel(string $name, array $modelInfo): string
{
// Generic static mapping for well-known generic names
$map = [
'chat' => 'Chat',
'embeddings' => 'Embeddings',
'chat_with_image_vision' => 'Chat With Image Vision',
'chat_with_complex_json' => 'Chat With Complex JSON',
'chat_with_image' => 'Chat With Image',
];

if (isset($map[$name])) {
return $map[$name];
}

// Prefer explicit model key if available (e.g. anthropic.claude-3-haiku-20240307-v1:0)
$raw = $modelInfo['model_info']['key'] ?? $modelInfo['litellm_params']['model'] ?? $name;

// Try to extract Claude patterns like "claude-3-5-haiku" or
// anthropic.claude-3-5-sonnet-20240620-v1:0
if (preg_match('/claude[-._]?([0-9]+)(?:-([0-9]+))?(?:-([a-z]+))?/i', $raw, $m)) {
$major = $m[1] ?? null;
$minor = $m[2] ?? null;
$suffix = $m[3] ?? null;

$version = $major;
if (null !== $minor) {
$version .= '.'.$minor;
}

$label = 'Claude '.trim($version);
if ($suffix) {
$label .= ' '.ucfirst($suffix);
}

return $label;
}

// Fall back to humanizing the model name (replace -, _, . with spaces and title-case)
$human = str_replace(['-', '_', '.'], ' ', $name);

return ucwords($human);
}

/**
* @param array<string, mixed> $info
*
Expand Down
19 changes: 16 additions & 3 deletions src/platform/src/Bridge/Anthropic/ModelCatalog.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,14 @@
final class ModelCatalog extends AbstractModelCatalog
{
/**
* @param array<string, array{class: string, capabilities: list<Capability>}> $additionalModels
* @param array<string, array{class: string, label: string, capabilities: list<Capability>}> $additionalModels
*/
public function __construct(array $additionalModels = [])
{
$defaultModels = [
'claude-3-haiku-20240307' => [
'class' => Claude::class,
'label' => 'Claude 3 Haiku',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -37,6 +38,7 @@ public function __construct(array $additionalModels = [])
],
'claude-3-opus-20240229' => [
'class' => Claude::class,
'label' => 'Claude 3 Opus',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -47,6 +49,7 @@ public function __construct(array $additionalModels = [])
],
'claude-3-5-haiku-latest' => [
'class' => Claude::class,
'label' => 'Claude 3.5 Haiku',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -57,6 +60,7 @@ public function __construct(array $additionalModels = [])
],
'claude-3-5-haiku-20241022' => [
'class' => Claude::class,
'label' => 'Claude 3.5 Haiku',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -67,6 +71,7 @@ public function __construct(array $additionalModels = [])
],
'claude-3-7-sonnet-latest' => [
'class' => Claude::class,
'label' => 'Claude 3.7 Sonnet',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -78,6 +83,7 @@ public function __construct(array $additionalModels = [])
],
'claude-3-7-sonnet-20250219' => [
'class' => Claude::class,
'label' => 'Claude 3.7 Sonnet',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -89,6 +95,7 @@ public function __construct(array $additionalModels = [])
],
'claude-sonnet-4-20250514' => [
'class' => Claude::class,
'label' => 'Claude Sonnet 4',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -100,6 +107,7 @@ public function __construct(array $additionalModels = [])
],
'claude-sonnet-4-0' => [
'class' => Claude::class,
'label' => 'Claude Sonnet 4',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -111,6 +119,7 @@ public function __construct(array $additionalModels = [])
],
'claude-opus-4-20250514' => [
'class' => Claude::class,
'label' => 'Claude Opus 4',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -122,6 +131,7 @@ public function __construct(array $additionalModels = [])
],
'claude-opus-4-0' => [
'class' => Claude::class,
'label' => 'Claude Opus 4',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -133,6 +143,7 @@ public function __construct(array $additionalModels = [])
],
'claude-opus-4-1' => [
'class' => Claude::class,
'label' => 'Claude Opus 4.1',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -143,8 +154,8 @@ public function __construct(array $additionalModels = [])
Capability::TOOL_CALLING,
],
],
'claude-opus-4-1-20250805' => [
'class' => Claude::class,
'claude-opus-4-1-20250805' => ['class' => Claude::class,
'label' => 'Claude Opus 4.1',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -157,6 +168,7 @@ public function __construct(array $additionalModels = [])
],
'claude-sonnet-4-5-20250929' => [
'class' => Claude::class,
'label' => 'Claude Sonnet 4.5',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand All @@ -169,6 +181,7 @@ public function __construct(array $additionalModels = [])
],
'claude-haiku-4-5-20251001' => [
'class' => Claude::class,
'label' => 'Claude Haiku 4.5',
'capabilities' => [
Capability::INPUT_MESSAGES,
Capability::INPUT_IMAGE,
Expand Down
Loading
Loading