Skip to content
Merged
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
8 changes: 8 additions & 0 deletions workspaces/boost/.changeset/rename-llamastack-to-ogx.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx': minor
'@red-hat-developer-hub/backstage-plugin-ogx-entity-provider': minor
'@red-hat-developer-hub/backstage-plugin-boost-backend': patch
'@red-hat-developer-hub/backstage-plugin-boost-common': patch
---

Rename all Llama Stack references to OGX across the boost workspace. The upstream project has been renamed from llamastack to ogx. This changes npm package names, module IDs, cache key prefixes, config paths, provider identifiers, and entity name prefixes. Consumers must update imports from `@red-hat-developer-hub/backstage-plugin-boost-backend-module-llamastack` to `@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx` and from `@red-hat-developer-hub/backstage-plugin-llamastack-entity-provider` to `@red-hat-developer-hub/backstage-plugin-ogx-entity-provider`.
22 changes: 11 additions & 11 deletions workspaces/boost/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ Use Backstage `cacheService`, `permissions`, `httpAuth`, `configApi`, and `catal

### Provider isolation

Each AI provider (`boost-backend-module-llamastack`, `boost-backend-module-kagenti`) is a separate `createBackendModule`. Providers must not import from each other. Shared types live in `boost-common`.
Each AI provider (`boost-backend-module-ogx`, `boost-backend-module-kagenti`) is a separate `createBackendModule`. Providers must not import from each other. Shared types live in `boost-common`.

### Capability checks, not identity checks

Expand All @@ -70,16 +70,16 @@ Agents, tools, models, MCP servers, and vector stores are Backstage catalog enti

### Package structure

| Package | Purpose |
| --------------------------------- | -------------------------------------------------------------------- |
| `boost` | Chat UI, agent gallery, admin panels, composable routable extensions |
| `boost-common` | Shared types, permissions (browser-safe, `common-library` role) |
| `boost-node` | `boostAiProviderServiceRef`, extension points (`node-library` role) |
| `boost-backend` | Core routes, services, middleware, ProviderManager |
| `boost-backend-module-llamastack` | Llama Stack provider module |
| `boost-backend-module-kagenti` | Kagenti provider module |
| `llamastack-entity-provider` | Independently deployable catalog entity provider |
| `kagenti-entity-provider` | Independently deployable catalog entity provider |
| Package | Purpose |
| ------------------------------ | -------------------------------------------------------------------- |
| `boost` | Chat UI, agent gallery, admin panels, composable routable extensions |
| `boost-common` | Shared types, permissions (browser-safe, `common-library` role) |
| `boost-node` | `boostAiProviderServiceRef`, extension points (`node-library` role) |
| `boost-backend` | Core routes, services, middleware, ProviderManager |
| `boost-backend-module-ogx` | OGX provider module |
| `boost-backend-module-kagenti` | Kagenti provider module |
| `ogx-entity-provider` | Independently deployable catalog entity provider |
| `kagenti-entity-provider` | Independently deployable catalog entity provider |

### Naming

Expand Down
20 changes: 10 additions & 10 deletions workspaces/boost/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,16 @@ All specs are currently in **draft** status (pre-implementation). They will be m

## Plugins

| Plugin | Package | Description |
| ------------------------------- | ------------------------------------------------------------------------- | -------------------------------------------------------------- |
| boost | `@red-hat-developer-hub/backstage-plugin-boost` | Frontend plugin — AI Catalog browse page and entity extensions |
| boost-backend | `@red-hat-developer-hub/backstage-plugin-boost-backend` | Backend plugin — chat, agent lifecycle, MCP, admin APIs |
| boost-common | `@red-hat-developer-hub/backstage-plugin-boost-common` | Shared types and permissions |
| boost-node | `@red-hat-developer-hub/backstage-plugin-boost-node` | Node library — service refs and extension points |
| boost-backend-module-llamastack | `@red-hat-developer-hub/backstage-plugin-boost-backend-module-llamastack` | Llama Stack provider module |
| boost-backend-module-kagenti | `@red-hat-developer-hub/backstage-plugin-boost-backend-module-kagenti` | Kagenti provider module |
| llamastack-entity-provider | `@red-hat-developer-hub/backstage-plugin-llamastack-entity-provider` | Llama Stack catalog entity provider |
| kagenti-entity-provider | `@red-hat-developer-hub/backstage-plugin-kagenti-entity-provider` | Kagenti catalog entity provider |
| Plugin | Package | Description |
| ---------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------- |
| boost | `@red-hat-developer-hub/backstage-plugin-boost` | Frontend plugin — AI Catalog browse page and entity extensions |
| boost-backend | `@red-hat-developer-hub/backstage-plugin-boost-backend` | Backend plugin — chat, agent lifecycle, MCP, admin APIs |
| boost-common | `@red-hat-developer-hub/backstage-plugin-boost-common` | Shared types and permissions |
| boost-node | `@red-hat-developer-hub/backstage-plugin-boost-node` | Node library — service refs and extension points |
| boost-backend-module-ogx | `@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx` | OGX provider module |
| boost-backend-module-kagenti | `@red-hat-developer-hub/backstage-plugin-boost-backend-module-kagenti` | Kagenti provider module |
| ogx-entity-provider | `@red-hat-developer-hub/backstage-plugin-ogx-entity-provider` | OGX catalog entity provider |
| kagenti-entity-provider | `@red-hat-developer-hub/backstage-plugin-kagenti-entity-provider` | Kagenti catalog entity provider |

## Compatibility

Expand Down
4 changes: 2 additions & 2 deletions workspaces/boost/app-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ boost:
- 'user:default/guest'

providers:
llamastack:
baseUrl: ${BOOST_LLAMA_STACK_URL:-http://localhost:8321}
ogx:
baseUrl: ${BOOST_OGX_URL:-http://localhost:8321}
defaultModel: ${BOOST_MODEL:-default}
kagenti:
baseUrl: ${KAGENTI_BASE_URL:-http://localhost:8080}
Expand Down
4 changes: 2 additions & 2 deletions workspaces/boost/dynamic-plugins-filesystem-reference.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ plugins:
# Provider modules — install at least one
# -----------------------------------------------------------------------

# Llama Stack provider: connects to a Llama Stack Responses API endpoint
- package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-boost-backend-module-llamastack-dynamic
# OGX provider: connects to a OGX Responses API endpoint
- package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-boost-backend-module-ogx-dynamic
disabled: false

# Kagenti provider: connects to a Kagenti multi-agent orchestrator
Expand Down
4 changes: 2 additions & 2 deletions workspaces/boost/dynamic-plugins-image-reference.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ plugins:
# Provider modules — install at least one
# -----------------------------------------------------------------------

# Llama Stack provider: connects to a Llama Stack Responses API endpoint
- package: oci://<registry>/backstage-plugin-boost-backend-module-llamastack:<tag>!red-hat-developer-hub-backstage-plugin-boost-backend-module-llamastack-dynamic
# OGX provider: connects to a OGX Responses API endpoint
- package: oci://<registry>/backstage-plugin-boost-backend-module-ogx:<tag>!red-hat-developer-hub-backstage-plugin-boost-backend-module-ogx-dynamic
disabled: false

# Kagenti provider: connects to a Kagenti multi-agent orchestrator
Expand Down
4 changes: 2 additions & 2 deletions workspaces/boost/packages/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@
"@backstage/plugin-techdocs-backend": "^2.2.1",
"@red-hat-developer-hub/backstage-plugin-boost-backend": "workspace:^",
"@red-hat-developer-hub/backstage-plugin-boost-backend-module-kagenti": "workspace:^",
"@red-hat-developer-hub/backstage-plugin-boost-backend-module-llamastack": "workspace:^",
"@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx": "workspace:^",
"@red-hat-developer-hub/backstage-plugin-kagenti-entity-provider": "workspace:^",
"@red-hat-developer-hub/backstage-plugin-llamastack-entity-provider": "workspace:^",
"@red-hat-developer-hub/backstage-plugin-ogx-entity-provider": "workspace:^",
"app": "link:../app",
"better-sqlite3": "^12.0.0",
"node-gyp": "^10.0.0"
Expand Down
4 changes: 2 additions & 2 deletions workspaces/boost/packages/backend/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ backend.add(import('@backstage/plugin-search-backend-module-techdocs'));
// Boost plugins
backend.add(import('@red-hat-developer-hub/backstage-plugin-boost-backend'));
backend.add(
import('@red-hat-developer-hub/backstage-plugin-boost-backend-module-llamastack'),
import('@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx'),
);
backend.add(
import('@red-hat-developer-hub/backstage-plugin-boost-backend-module-kagenti'),
Expand All @@ -98,7 +98,7 @@ backend.add(
import('@red-hat-developer-hub/backstage-plugin-kagenti-entity-provider'),
);
backend.add(
import('@red-hat-developer-hub/backstage-plugin-llamastack-entity-provider'),
import('@red-hat-developer-hub/backstage-plugin-ogx-entity-provider'),
);

backend.start();
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "@red-hat-developer-hub/backstage-plugin-boost-backend-module-llamastack",
"name": "@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx",
"version": "0.1.2",
"license": "Apache-2.0",
"description": "Llama Stack provider module for the boost AI platform",
"description": "OGX provider module for the boost AI platform",
"main": "src/index.ts",
"types": "src/index.ts",
"publishConfig": {
Expand All @@ -15,7 +15,7 @@
"pluginPackages": [
"@red-hat-developer-hub/backstage-plugin-boost",
"@red-hat-developer-hub/backstage-plugin-boost-backend",
"@red-hat-developer-hub/backstage-plugin-boost-backend-module-llamastack",
"@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx",
"@red-hat-developer-hub/backstage-plugin-boost-common",
"@red-hat-developer-hub/backstage-plugin-boost-node"
]
Expand Down Expand Up @@ -63,7 +63,7 @@
"repository": {
"type": "git",
"url": "git+https://github.com/redhat-developer/rhdh-plugins.git",
"directory": "workspaces/boost/plugins/boost-backend-module-llamastack"
"directory": "workspaces/boost/plugins/boost-backend-module-ogx"
},
"homepage": "https://red.ht/rhdh",
"bugs": "https://github.com/redhat-developer/rhdh-plugins/issues"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
## API Report File for "@red-hat-developer-hub/backstage-plugin-boost-backend-module-llamastack"
## API Report File for "@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx"

> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).

```ts
import { BackendFeature } from '@backstage/backend-plugin-api';

// @public
const boostModuleLlamastack: BackendFeature;
export default boostModuleLlamastack;
const boostModuleOgx: BackendFeature;
export default boostModuleOgx;
```
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
*/

/**
* Llama Stack provider module for the boost AI platform.
* OGX provider module for the boost AI platform.
*
* @packageDocumentation
*/

export { boostModuleLlamastack as default } from './module';
export { boostModuleOgx as default } from './module';
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,25 @@ import { boostProviderExtensionPoint } from '@red-hat-developer-hub/backstage-pl
import { ResponsesApiProviderFactory } from './provider/ResponsesApiProviderFactory';

/**
* Llama Stack provider module for the boost plugin.
* OGX provider module for the boost plugin.
*
* Registers a ResponsesApiProvider via the boost extension point,
* enabling Llama Stack as an AI backend. All caches use Backstage
* enabling OGX as an AI backend. All caches use Backstage
* cacheService (Decision 3).
*
* Install alongside the core boost plugin:
*
* ```ts
* // packages/backend/src/index.ts
* backend.add(import('@red-hat-developer-hub/backstage-plugin-boost-backend'));
* backend.add(import('@red-hat-developer-hub/backstage-plugin-boost-backend-module-llamastack'));
* backend.add(import('@red-hat-developer-hub/backstage-plugin-boost-backend-module-ogx'));
* ```
*
* @public
*/
export const boostModuleLlamastack = createBackendModule({
export const boostModuleOgx = createBackendModule({
pluginId: 'boost',
moduleId: 'llamastack',
moduleId: 'ogx',
register(reg) {
reg.registerInit({
deps: {
Expand All @@ -50,7 +50,7 @@ export const boostModuleLlamastack = createBackendModule({
logger: coreServices.logger,
},
async init({ providers, config, cache, logger }) {
logger.info('Initializing Llama Stack provider module');
logger.info('Initializing OGX provider module');

const factory = new ResponsesApiProviderFactory({
config,
Expand All @@ -69,9 +69,7 @@ export const boostModuleLlamastack = createBackendModule({
// Register the provider with the boost plugin
providers.registerProvider(provider);

logger.info(
`Llama Stack provider registered (id: ${provider.descriptor.id})`,
);
logger.info(`OGX provider registered (id: ${provider.descriptor.id})`);
logger.info(
`Caches initialized: modelList (60s TTL), mcpAuthToken (dynamic TTL), ` +
`clientManager (1h TTL), sessionMap (24h TTL)`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ describe('ClientManager', () => {

await clientManager.set('user:default/john', state);
expect(cache.set).toHaveBeenCalledWith(
'llamastack:client:user:default/john',
'ogx:client:user:default/john',
JSON.stringify(state),
{ ttl: 3600000 },
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export interface ClientManagerOptions {
* @internal
*/
export class ClientManager {
private static readonly KEY_PREFIX = 'llamastack:client:';
private static readonly KEY_PREFIX = 'ogx:client:';
static readonly TTL_MS = 3600 * 1000; // 1 hour

private readonly cache: CacheService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ describe('McpAuthTokenCache', () => {
it('stores token with TTL in milliseconds', async () => {
await tokenCache.set('my-server', 'token-abc', 300);
expect(cache.set).toHaveBeenCalledWith(
'llamastack:mcp-token:my-server',
'ogx:mcp-token:my-server',
'token-abc',
{ ttl: 300000 },
);
Expand All @@ -89,12 +89,12 @@ describe('McpAuthTokenCache', () => {
await tokenCache.set('server-b', 'token-b', 120);

expect(cache.set).toHaveBeenCalledWith(
'llamastack:mcp-token:server-a',
'ogx:mcp-token:server-a',
'token-a',
{ ttl: 60000 },
);
expect(cache.set).toHaveBeenCalledWith(
'llamastack:mcp-token:server-b',
'ogx:mcp-token:server-b',
'token-b',
{ ttl: 120000 },
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export interface McpAuthTokenCacheOptions {
* @internal
*/
export class McpAuthTokenCache {
private static readonly KEY_PREFIX = 'llamastack:mcp-token:';
private static readonly KEY_PREFIX = 'ogx:mcp-token:';

private readonly cache: CacheService;
private readonly logger: LoggerService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import type {
LoggerService,
} from '@backstage/backend-plugin-api';
import { ModelListCache } from './ModelListCache';
import type { LlamaStackModel } from '../types';
import type { OgxModel } from '../types';

function createMockLogger(): LoggerService {
return {
Expand Down Expand Up @@ -65,7 +65,7 @@ describe('ModelListCache', () => {
});

it('stores and retrieves models', async () => {
const models: LlamaStackModel[] = [
const models: OgxModel[] = [
{ identifier: 'model-1', displayName: 'Model One' },
{ identifier: 'model-2', displayName: 'Model Two' },
];
Expand All @@ -81,7 +81,7 @@ describe('ModelListCache', () => {
});

it('invalidates cached models', async () => {
const models: LlamaStackModel[] = [{ identifier: 'model-1' }];
const models: OgxModel[] = [{ identifier: 'model-1' }];

await modelListCache.set(models);
await modelListCache.invalidate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import type {
CacheService,
LoggerService,
} from '@backstage/backend-plugin-api';
import type { LlamaStackModel } from '../types';
import type { OgxModel } from '../types';

/**
* Options for creating a {@link ModelListCache}.
Expand All @@ -30,10 +30,10 @@ export interface ModelListCacheOptions {
logger: LoggerService;
}

const CACHE_KEY = 'llamastack:models';
const CACHE_KEY = 'ogx:models';

/**
* Caches the list of available models from the Llama Stack endpoint.
* Caches the list of available models from the OGX endpoint.
*
* Uses Backstage cacheService with a 60-second TTL per the design spec
* (Decision 3, task 3.2). Redis-backed in production for multi-instance safety.
Expand All @@ -56,11 +56,11 @@ export class ModelListCache {
*
* @returns The cached models, or undefined if not cached.
*/
async get(): Promise<LlamaStackModel[] | undefined> {
async get(): Promise<OgxModel[] | undefined> {
const cached = await this.cache.get(CACHE_KEY);
if (typeof cached === 'string') {
try {
const models = JSON.parse(cached) as LlamaStackModel[];
const models = JSON.parse(cached) as OgxModel[];
this.logger.debug(`Model list cache hit (${models.length} models)`);
return models;
} catch {
Expand All @@ -77,7 +77,7 @@ export class ModelListCache {
*
* @param models - The model list to cache.
*/
async set(models: LlamaStackModel[]): Promise<void> {
async set(models: OgxModel[]): Promise<void> {
await this.cache.set(CACHE_KEY, JSON.stringify(models));
this.logger.debug(`Cached ${models.length} models`);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ describe('ResponsesApiProvider', () => {

describe('descriptor', () => {
it('has correct provider identity', () => {
expect(provider.descriptor.id).toBe('llamastack');
expect(provider.descriptor.name).toBe('Llama Stack');
expect(provider.descriptor.id).toBe('ogx');
expect(provider.descriptor.name).toBe('OGX');
expect(provider.descriptor.capabilities.agentCatalog).toBe(true);
expect(provider.descriptor.capabilities.namespaceScoping).toBe(false);
});
Expand Down Expand Up @@ -132,7 +132,7 @@ describe('ResponsesApiProvider', () => {

await expect(
provider.chat([{ type: 'text', text: 'Test' }]),
).rejects.toThrow('Llama Stack Responses API returned 500');
).rejects.toThrow('OGX Responses API returned 500');
});
});

Expand Down
Loading
Loading