@jeffusion/bungee-llms 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +38 -0
  2. package/dist/adapter.d.ts +1 -0
  3. package/dist/core/adapter.d.ts +10 -0
  4. package/dist/core/conversion-service.d.ts +14 -0
  5. package/dist/core/index.d.ts +4 -0
  6. package/dist/core/registry.d.ts +10 -0
  7. package/dist/core/types.d.ts +40 -0
  8. package/dist/index.d.ts +10 -0
  9. package/dist/index.js +6597 -0
  10. package/dist/openai/index.d.ts +1 -0
  11. package/dist/openai/openai-protocol-conversion.d.ts +1 -0
  12. package/dist/openai-anthropic/index.d.ts +1 -0
  13. package/dist/openai-anthropic/openai-to-anthropic-request-conversion.d.ts +1 -0
  14. package/dist/plugin-api.d.ts +4 -0
  15. package/dist/plugin-api.js +6596 -0
  16. package/dist/protocol-converters/anthropic-to-gemini.converter.d.ts +62 -0
  17. package/dist/protocol-converters/anthropic-to-openai.converter.d.ts +105 -0
  18. package/dist/protocol-converters/base.d.ts +27 -0
  19. package/dist/protocol-converters/default-registry.d.ts +1 -0
  20. package/dist/protocol-converters/gemini-to-anthropic.converter.d.ts +57 -0
  21. package/dist/protocol-converters/gemini-to-openai.converter.d.ts +31 -0
  22. package/dist/protocol-converters/index.d.ts +10 -0
  23. package/dist/protocol-converters/openai-to-anthropic.converter.d.ts +27 -0
  24. package/dist/protocol-converters/openai-to-gemini.converter.d.ts +32 -0
  25. package/dist/protocol-converters/registry.d.ts +9 -0
  26. package/dist/protocol-converters/utils.d.ts +71 -0
  27. package/dist/providers/anthropic/anthropic-adapter.d.ts +16 -0
  28. package/dist/providers/anthropic/index.d.ts +1 -0
  29. package/dist/providers/index.d.ts +4 -0
  30. package/dist/providers/openai/index.d.ts +3 -0
  31. package/dist/providers/openai/messages-compat-normalization.d.ts +42 -0
  32. package/dist/providers/openai/openai-adapter.d.ts +16 -0
  33. package/dist/providers/openai/protocol-conversion.d.ts +27 -0
  34. package/dist/providers/openai-anthropic/index.d.ts +1 -0
  35. package/dist/providers/openai-anthropic/request-conversion.d.ts +20 -0
  36. package/dist/providers/provider-catalog.d.ts +26 -0
  37. package/dist/registry.d.ts +1 -0
  38. package/dist/runtime/index.d.ts +1 -0
  39. package/dist/runtime/llms-runtime.d.ts +30 -0
  40. package/dist/service.d.ts +1 -0
  41. package/dist/types.d.ts +1 -0
  42. package/package.json +76 -0
package/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # @jeffusion/bungee-llms
2
+
3
+ Independent LLM adapters and protocol conversion package for Bungee.
4
+
5
+ ## Scope
6
+
7
+ - Provider-agnostic protocol conversion abstractions
8
+ - Adapter registry and conversion service
9
+ - Provider catalog and runtime container
10
+ - OpenAI/Anthropic/Gemini protocol converters (request/response/stream) centralized in `src/protocol-converters`
11
+ - Runtime registration helper `registerDefaultProtocolConverters()` for plugin/wrapper layers
12
+
13
+ ## Usage
14
+
15
+ ```ts
16
+ import {
17
+ LLMProtocolAdapterRegistry,
18
+ LLMProtocolConversionService,
19
+ LLMSRuntime,
20
+ registerDefaultProtocolConverters
21
+ } from '@jeffusion/bungee-llms';
22
+
23
+ registerDefaultProtocolConverters();
24
+ ```
25
+
26
+ ### Plugin/Wrapper Stable Facade
27
+
28
+ For plugin and wrapper layers, prefer the dedicated stable entrypoint to reduce coupling to internal file layout:
29
+
30
+ ```ts
31
+ import {
32
+ type AIConverter,
33
+ ProtocolTransformerRegistry,
34
+ registerDefaultProtocolConverters,
35
+ OpenAIProtocolConversion,
36
+ OpenAIMessagesCompatibilityNormalizer
37
+ } from '@jeffusion/bungee-llms/plugin-api';
38
+ ```
@@ -0,0 +1 @@
1
+ export * from './core/adapter';
@@ -0,0 +1,10 @@
1
+ import type { CanonicalRequest, CanonicalResponse, CanonicalStreamEvent, ConversionContext, LLMProvider } from './types';
2
+ export interface LLMProtocolAdapter<ProviderRequest = unknown, ProviderResponse = unknown, ProviderStreamEvent = unknown> {
3
+ readonly provider: LLMProvider;
4
+ toCanonicalRequest(request: ProviderRequest, context: ConversionContext): CanonicalRequest;
5
+ fromCanonicalRequest(request: CanonicalRequest, context: ConversionContext): ProviderRequest;
6
+ toCanonicalResponse(response: ProviderResponse, context: ConversionContext): CanonicalResponse;
7
+ fromCanonicalResponse(response: CanonicalResponse, context: ConversionContext): ProviderResponse;
8
+ toCanonicalStreamEvent?(event: ProviderStreamEvent, context: ConversionContext): CanonicalStreamEvent | null;
9
+ fromCanonicalStreamEvent?(event: CanonicalStreamEvent, context: ConversionContext): ProviderStreamEvent | null;
10
+ }
@@ -0,0 +1,14 @@
1
+ import type { LLMProtocolAdapter } from './adapter';
2
+ import { LLMProtocolAdapterRegistry } from './registry';
3
+ import type { CanonicalStreamEvent, LLMProvider } from './types';
4
+ export declare class LLMProtocolConversionService {
5
+ private readonly registry;
6
+ constructor(registry?: LLMProtocolAdapterRegistry);
7
+ registerAdapter(adapter: LLMProtocolAdapter): void;
8
+ unregisterAdapter(provider: LLMProvider): void;
9
+ convertRequest<T = unknown>(from: LLMProvider, to: LLMProvider, request: unknown, metadata?: Record<string, unknown>): T;
10
+ convertResponse<T = unknown>(from: LLMProvider, to: LLMProvider, response: unknown, metadata?: Record<string, unknown>): T;
11
+ convertStreamEvent<T = unknown>(from: LLMProvider, to: LLMProvider, event: unknown, metadata?: Record<string, unknown>): T | null;
12
+ getRegisteredProviders(): string[];
13
+ createPassthroughStreamEvent(type: string, payload: unknown): CanonicalStreamEvent;
14
+ }
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export * from './adapter';
3
+ export * from './registry';
4
+ export * from './conversion-service';
@@ -0,0 +1,10 @@
1
+ import type { LLMProtocolAdapter } from './adapter';
2
+ import type { LLMProvider } from './types';
3
+ export declare class LLMProtocolAdapterRegistry {
4
+ private readonly adapters;
5
+ register(adapter: LLMProtocolAdapter): void;
6
+ unregister(provider: LLMProvider): void;
7
+ get(provider: LLMProvider): LLMProtocolAdapter | undefined;
8
+ require(provider: LLMProvider): LLMProtocolAdapter;
9
+ listProviders(): string[];
10
+ }
@@ -0,0 +1,40 @@
1
+ export type LLMProvider = 'openai' | 'anthropic' | 'gemini' | (string & {});
2
+ export type CanonicalRole = 'system' | 'developer' | 'user' | 'assistant' | 'tool';
3
+ export interface CanonicalToolDefinition {
4
+ name: string;
5
+ description?: string;
6
+ parameters?: Record<string, unknown>;
7
+ }
8
+ export interface CanonicalToolCall {
9
+ id: string;
10
+ name: string;
11
+ arguments: string;
12
+ }
13
+ export interface CanonicalMessage {
14
+ role: CanonicalRole;
15
+ content: unknown;
16
+ toolCalls?: CanonicalToolCall[];
17
+ toolCallId?: string;
18
+ metadata?: Record<string, unknown>;
19
+ }
20
+ export interface CanonicalRequest {
21
+ model?: string;
22
+ messages: CanonicalMessage[];
23
+ tools?: CanonicalToolDefinition[];
24
+ toolChoice?: unknown;
25
+ metadata?: Record<string, unknown>;
26
+ }
27
+ export interface CanonicalResponse {
28
+ message?: CanonicalMessage;
29
+ messages?: CanonicalMessage[];
30
+ metadata?: Record<string, unknown>;
31
+ }
32
+ export interface CanonicalStreamEvent {
33
+ type: string;
34
+ payload: unknown;
35
+ }
36
+ export interface ConversionContext {
37
+ from: LLMProvider;
38
+ to: LLMProvider;
39
+ metadata?: Record<string, unknown>;
40
+ }
@@ -0,0 +1,10 @@
1
+ export * from './core';
2
+ export * from './providers';
3
+ export * from './runtime';
4
+ export * from './types';
5
+ export * from './adapter';
6
+ export * from './registry';
7
+ export * from './service';
8
+ export * from './openai';
9
+ export * from './openai-anthropic';
10
+ export * from './protocol-converters';