@aeye/ai 0.1.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 (54) hide show
  1. package/README.md +1324 -0
  2. package/dist/ai.d.ts +204 -0
  3. package/dist/ai.d.ts.map +1 -0
  4. package/dist/ai.js +837 -0
  5. package/dist/ai.js.map +1 -0
  6. package/dist/apis/base.d.ts +181 -0
  7. package/dist/apis/base.d.ts.map +1 -0
  8. package/dist/apis/base.js +359 -0
  9. package/dist/apis/base.js.map +1 -0
  10. package/dist/apis/chat.d.ts +82 -0
  11. package/dist/apis/chat.d.ts.map +1 -0
  12. package/dist/apis/chat.js +214 -0
  13. package/dist/apis/chat.js.map +1 -0
  14. package/dist/apis/embed.d.ts +27 -0
  15. package/dist/apis/embed.d.ts.map +1 -0
  16. package/dist/apis/embed.js +70 -0
  17. package/dist/apis/embed.js.map +1 -0
  18. package/dist/apis/image.d.ts +77 -0
  19. package/dist/apis/image.d.ts.map +1 -0
  20. package/dist/apis/image.js +313 -0
  21. package/dist/apis/image.js.map +1 -0
  22. package/dist/apis/models.d.ts +108 -0
  23. package/dist/apis/models.d.ts.map +1 -0
  24. package/dist/apis/models.js +118 -0
  25. package/dist/apis/models.js.map +1 -0
  26. package/dist/apis/speech.d.ts +27 -0
  27. package/dist/apis/speech.d.ts.map +1 -0
  28. package/dist/apis/speech.js +79 -0
  29. package/dist/apis/speech.js.map +1 -0
  30. package/dist/apis/transcribe.d.ts +26 -0
  31. package/dist/apis/transcribe.d.ts.map +1 -0
  32. package/dist/apis/transcribe.js +103 -0
  33. package/dist/apis/transcribe.js.map +1 -0
  34. package/dist/common.d.ts +10 -0
  35. package/dist/common.d.ts.map +1 -0
  36. package/dist/common.js +17 -0
  37. package/dist/common.js.map +1 -0
  38. package/dist/index.d.ts +17 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +17 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/modelDetection.d.ts +31 -0
  43. package/dist/modelDetection.d.ts.map +1 -0
  44. package/dist/modelDetection.js +78 -0
  45. package/dist/modelDetection.js.map +1 -0
  46. package/dist/registry.d.ts +150 -0
  47. package/dist/registry.d.ts.map +1 -0
  48. package/dist/registry.js +639 -0
  49. package/dist/registry.js.map +1 -0
  50. package/dist/types.d.ts +767 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +8 -0
  53. package/dist/types.js.map +1 -0
  54. package/package.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech.js","sourceRoot":"","sources":["../../src/apis/speech.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,MAAM,OAAO,SAAiC,SAAQ,OAKrD;IACC,YAAY,EAAS;QACnB,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC;IAED,+EAA+E;IAC/E,2CAA2C;IAC3C,+EAA+E;IAErE,uBAAuB,CAAC,QAA2B,EAAE,OAAsB,EAAE,YAAqB;QAC1G,OAAO,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;IAChC,CAAC;IAES,qBAAqB,CAAC,QAA0B,EAAE,OAAsB,EAAE,YAAqB;QACvG,MAAM,MAAM,GAAG,IAAI,GAAG,CAAiB,QAAQ,CAAC,CAAC;QAEjD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAES,oBAAoB;QAC5B,OAAO,iDAAiD,CAAC;IAC3D,CAAC;IAES,YAAY,CAAC,SAA+B;QACpD,OAAO,SAAS,KAAK,SAAS;YAC5B,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,iCAAiC,CAAC;IACxC,CAAC;IAES,eAAe,CAAC,SAA+B;QACvD,OAAO,SAAS,KAAK,SAAS;YAC5B,CAAC,CAAC,0BAA0B;YAC5B,CAAC,CAAC,oCAAoC,CAAC;IAC3C,CAAC;IAES,KAAK,CAAC,cAAc,CAC5B,OAAsB,EACtB,QAA6B,EAC7B,GAAiB;QAEjB,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAO,CACpC,OAAO,EACP,GAAG,EACH,QAAQ,CAAC,cAAc,CACxB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,CAAC,oBAAoB,CACnC,OAAsB,EACtB,QAA6B,EAC7B,GAAiB;QAEjB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,+EAA+E;IAC/E,qBAAqB;IACrB,+EAA+E;IAErE,oBAAoB,CAAC,OAAsB;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClD,0FAA0F;QAC1F,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACzD,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,EAAE,CAAC;QAE/C,OAAO;YACL,IAAI,EAAE;gBACJ,KAAK,EAAE,MAAM;aACd;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,gBAAgB;aAC1B;SACF,CAAC;IACJ,CAAC;IAES,gBAAgB,CAAC,QAAwB;QACjD,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IAES,gBAAgB,CAAC,MAAwB,EAAE,KAAa;QAChE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAES,mBAAmB,CAC3B,OAA4B;QAE5B,OAAO,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;IAC9B,CAAC;IAES,sBAAsB,CAC9B,OAA4B;QAE5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,mBAAmB,CAAC,QAA6B;QACzD,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpC,CAAC;IAES,mBAAmB,CAAC,QAA6B;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Transcribe API
3
+ *
4
+ * Provides speech-to-text functionality.
5
+ */
6
+ import type { AI } from '../ai';
7
+ import type { AIBaseTypes, AIContext, ModelCapability, ModelHandlerFor, ModelParameter, SelectedModelFor, TranscriptionChunk, TranscriptionRequest, TranscriptionResponse, Usage } from '../types';
8
+ import { BaseAPI } from './base';
9
+ export declare class TranscribeAPI<T extends AIBaseTypes> extends BaseAPI<T, TranscriptionRequest, TranscriptionResponse, TranscriptionChunk> {
10
+ constructor(ai: AI<T>);
11
+ protected getRequiredCapabilities(provided: ModelCapability[], request: TranscriptionRequest, forStreaming: boolean): ModelCapability[];
12
+ protected getRequiredParameters(provided: ModelParameter[], request: TranscriptionRequest, forStreaming: boolean): ModelParameter[];
13
+ protected getNoModelFoundError(): string;
14
+ protected getErrorType(): string;
15
+ protected getErrorMessage(): string;
16
+ protected executeRequest(request: TranscriptionRequest, selected: SelectedModelFor<T>, ctx: AIContext<T>): Promise<TranscriptionResponse>;
17
+ protected estimateRequestUsage(): Usage;
18
+ protected executeStreamRequest(request: TranscriptionRequest, selected: SelectedModelFor<T>, ctx: AIContext<T>): AsyncIterable<TranscriptionChunk>;
19
+ protected responseToChunks(response: TranscriptionResponse): TranscriptionChunk[];
20
+ protected chunksToResponse(chunks: TranscriptionChunk[], givenModel: string): TranscriptionResponse;
21
+ protected getHandlerGetMethod(handler?: ModelHandlerFor<T>): ((request: TranscriptionRequest, ctx: AIContext<T>) => Promise<TranscriptionResponse>) | undefined;
22
+ protected getHandlerStreamMethod(handler?: ModelHandlerFor<T>): ((request: TranscriptionRequest, ctx: AIContext<T>) => AsyncIterable<TranscriptionChunk>) | undefined;
23
+ protected hasProviderExecutor(selected: SelectedModelFor<T>): boolean;
24
+ protected hasProviderStreamer(selected: SelectedModelFor<T>): boolean;
25
+ }
26
+ //# sourceMappingURL=transcribe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcribe.d.ts","sourceRoot":"","sources":["../../src/apis/transcribe.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,EACN,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,CAAE,SAAQ,OAAO,CAC/D,CAAC,EACD,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,CACnB;gBACa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAQrB,SAAS,CAAC,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,OAAO,GAAG,eAAe,EAAE;IAIvI,SAAS,CAAC,qBAAqB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,OAAO,GAAG,cAAc,EAAE;IAanI,SAAS,CAAC,oBAAoB,IAAI,MAAM;IAIxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhC,SAAS,CAAC,eAAe,IAAI,MAAM;cAInB,cAAc,CAC5B,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAChB,OAAO,CAAC,qBAAqB,CAAC;IAYjC,SAAS,CAAC,oBAAoB,IAAI,KAAK;cAiBtB,oBAAoB,CACnC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAC7B,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,GAChB,aAAa,CAAC,kBAAkB,CAAC;IAYpC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,kBAAkB,EAAE;IAQjF,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,qBAAqB;IAuBnG,SAAS,CAAC,mBAAmB,CAC3B,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,CAAC,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,SAAS;IAIrG,SAAS,CAAC,sBAAsB,CAC9B,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,CAAC,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,kBAAkB,CAAC,CAAC,GAAG,SAAS;IAIxG,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO;IAIrE,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO;CAGtE"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Transcribe API
3
+ *
4
+ * Provides speech-to-text functionality.
5
+ */
6
+ import { BaseAPI } from './base';
7
+ export class TranscribeAPI extends BaseAPI {
8
+ constructor(ai) {
9
+ super(ai);
10
+ }
11
+ // ============================================================================
12
+ // REQUIRED ABSTRACT METHOD IMPLEMENTATIONS
13
+ // ============================================================================
14
+ getRequiredCapabilities(provided, request, forStreaming) {
15
+ return ['hearing', ...provided];
16
+ }
17
+ getRequiredParameters(provided, request, forStreaming) {
18
+ const params = new Set();
19
+ if (request.prompt !== undefined) {
20
+ params.add('transcribePrompt');
21
+ }
22
+ if (forStreaming) {
23
+ params.add('transcribeStream');
24
+ }
25
+ return Array.from(params);
26
+ }
27
+ getNoModelFoundError() {
28
+ return 'No compatible model found for transcription';
29
+ }
30
+ getErrorType() {
31
+ return 'transcription-failed';
32
+ }
33
+ getErrorMessage() {
34
+ return 'Transcription failed';
35
+ }
36
+ async executeRequest(request, selected, ctx) {
37
+ return await selected.provider.transcribe(request, ctx, selected.providerConfig);
38
+ }
39
+ // ============================================================================
40
+ // OPTIONAL OVERRIDES
41
+ // ============================================================================
42
+ estimateRequestUsage() {
43
+ // Default estimate for audio transcription
44
+ // Assume 1 minute of audio ~ 200 tokens of output
45
+ const estimatedMinutes = 1;
46
+ const estimatedTokens = estimatedMinutes * 200;
47
+ return {
48
+ audio: {
49
+ seconds: estimatedMinutes * 60,
50
+ input: 1000 // Rough estimate for audio input tokens
51
+ },
52
+ text: {
53
+ output: estimatedTokens
54
+ }
55
+ };
56
+ }
57
+ async *executeStreamRequest(request, selected, ctx) {
58
+ if (!selected.provider.transcribeStream) {
59
+ throw new Error(`Provider ${selected.model.provider} does not support streaming transcription`);
60
+ }
61
+ yield* selected.provider.transcribeStream(request, ctx, selected.providerConfig);
62
+ }
63
+ responseToChunks(response) {
64
+ return [{
65
+ text: response.text,
66
+ model: response.model,
67
+ usage: response.usage,
68
+ }];
69
+ }
70
+ chunksToResponse(chunks, givenModel) {
71
+ let text = '';
72
+ let model = givenModel;
73
+ let usage;
74
+ for (const chunk of chunks) {
75
+ if (chunk.model) {
76
+ model = chunk.model;
77
+ }
78
+ if (chunk.usage) {
79
+ usage = chunk.usage;
80
+ }
81
+ if (chunk.delta) {
82
+ text += chunk.delta;
83
+ }
84
+ if (chunk.text) {
85
+ text = chunk.text;
86
+ }
87
+ }
88
+ return { text, model, usage };
89
+ }
90
+ getHandlerGetMethod(handler) {
91
+ return handler?.transcribe?.get;
92
+ }
93
+ getHandlerStreamMethod(handler) {
94
+ return handler?.transcribe?.stream;
95
+ }
96
+ hasProviderExecutor(selected) {
97
+ return !!selected.provider.transcribe;
98
+ }
99
+ hasProviderStreamer(selected) {
100
+ return !!selected.provider.transcribeStream;
101
+ }
102
+ }
103
+ //# sourceMappingURL=transcribe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcribe.js","sourceRoot":"","sources":["../../src/apis/transcribe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ModelInput } from "@aeye/core";
2
+ import { ModelInfo } from "./types";
3
+ /**
4
+ * Type guard to check if a ModelInput is a ModelInfo object.
5
+ *
6
+ * @param input - The model input to check.
7
+ * @returns True if the input is a ModelInfo object, false otherwise.
8
+ */
9
+ export declare function isModelInfo<TProvider extends string = string>(input: ModelInput): input is ModelInfo<TProvider>;
10
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC;;;;;EAKE;AACF,wBAAgB,WAAW,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,KAAK,IAAI,SAAS,CAAC,SAAS,CAAC,CAS/G"}
package/dist/common.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Type guard to check if a ModelInput is a ModelInfo object.
3
+ *
4
+ * @param input - The model input to check.
5
+ * @returns True if the input is a ModelInfo object, false otherwise.
6
+ */
7
+ export function isModelInfo(input) {
8
+ return typeof input === 'object'
9
+ && ('id' in input)
10
+ && ('provider' in input)
11
+ && ('name' in input)
12
+ && ('capabilities' in input)
13
+ && ('tier' in input)
14
+ && ('pricing' in input)
15
+ && ('contextWindow' in input);
16
+ }
17
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAGA;;;;;EAKE;AACF,MAAM,UAAU,WAAW,CAAoC,KAAiB;IAC9E,OAAO,OAAO,KAAK,KAAK,QAAQ;WAC3B,CAAC,IAAI,IAAI,KAAK,CAAC;WACf,CAAC,UAAU,IAAI,KAAK,CAAC;WACrB,CAAC,MAAM,IAAI,KAAK,CAAC;WACjB,CAAC,cAAc,IAAI,KAAK,CAAC;WACzB,CAAC,MAAM,IAAI,KAAK,CAAC;WACjB,CAAC,SAAS,IAAI,KAAK,CAAC;WACpB,CAAC,eAAe,IAAI,KAAK,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * AI Library (Instance-Based API)
3
+ *
4
+ * Main export file for the class-based AI library.
5
+ */
6
+ export * from './types';
7
+ export * from './modelDetection';
8
+ export * from './ai';
9
+ export * from './registry';
10
+ export * from './apis/models';
11
+ export * from './apis/base';
12
+ export * from './apis/chat';
13
+ export * from './apis/embed';
14
+ export * from './apis/image';
15
+ export * from './apis/speech';
16
+ export * from './apis/transcribe';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,MAAM,CAAC;AACrB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * AI Library (Instance-Based API)
3
+ *
4
+ * Main export file for the class-based AI library.
5
+ */
6
+ export * from './types';
7
+ export * from './modelDetection';
8
+ export * from './ai';
9
+ export * from './registry';
10
+ export * from './apis/models';
11
+ export * from './apis/base';
12
+ export * from './apis/chat';
13
+ export * from './apis/embed';
14
+ export * from './apis/image';
15
+ export * from './apis/speech';
16
+ export * from './apis/transcribe';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,MAAM,CAAC;AACrB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Model Detection Utilities
3
+ *
4
+ * Shared utilities for detecting model capabilities, tiers, and other metadata
5
+ * independently of provider implementations. This allows providers to be used
6
+ * interchangeably (e.g., using OpenAI models through OpenRouter).
7
+ */
8
+ import type { ModelCapability, ModelTier } from './types';
9
+ /**
10
+ * Model metadata for capability detection
11
+ */
12
+ export interface ModelMetadata {
13
+ id: string;
14
+ name: string;
15
+ modality?: string;
16
+ capabilities?: string[];
17
+ }
18
+ /**
19
+ * Detect model tier from model name
20
+ * Note: This should only be used as a fallback when provider doesn't provide tier info
21
+ */
22
+ export declare function detectTier(name: string): ModelTier;
23
+ /**
24
+ * Detect capabilities from modality string (OpenRouter format)
25
+ */
26
+ export declare function detectCapabilitiesFromModality(modality: string, modelId: string): Set<ModelCapability>;
27
+ /**
28
+ * Detect ZDR (Zero Data Retention) support from provider metadata
29
+ */
30
+ export declare function detectZDRFromModeration(isModerated: boolean): boolean;
31
+ //# sourceMappingURL=modelDetection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelDetection.d.ts","sourceRoot":"","sources":["../src/modelDetection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAgClD;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,GAAG,CAAC,eAAe,CAAC,CAsCtB;AAGD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAGrE"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Model Detection Utilities
3
+ *
4
+ * Shared utilities for detecting model capabilities, tiers, and other metadata
5
+ * independently of provider implementations. This allows providers to be used
6
+ * interchangeably (e.g., using OpenAI models through OpenRouter).
7
+ */
8
+ /**
9
+ * Detect model tier from model name
10
+ * Note: This should only be used as a fallback when provider doesn't provide tier info
11
+ */
12
+ export function detectTier(name) {
13
+ const n = name.toLowerCase();
14
+ // Check name for tier indicators
15
+ if (n.includes('flagship')) {
16
+ return 'flagship';
17
+ }
18
+ if (n.includes('preview') ||
19
+ n.includes('experimental') ||
20
+ n.includes('alpha') ||
21
+ n.includes('beta')) {
22
+ return 'experimental';
23
+ }
24
+ if (n.includes('legacy')) {
25
+ return 'legacy';
26
+ }
27
+ if (n.includes('mini') ||
28
+ n.includes('small') ||
29
+ n.includes('haiku') ||
30
+ n.includes('efficient')) {
31
+ return 'efficient';
32
+ }
33
+ // Default to flagship (assume modern model if no indicators)
34
+ return 'flagship';
35
+ }
36
+ /**
37
+ * Detect capabilities from modality string (OpenRouter format)
38
+ */
39
+ export function detectCapabilitiesFromModality(modality, modelId) {
40
+ const capabilities = new Set();
41
+ const lowerModality = modality.toLowerCase();
42
+ const [input, output = input] = lowerModality.split('->').map((s) => s.trim());
43
+ // Text capabilities
44
+ if (output.includes('text')) {
45
+ capabilities.add('chat');
46
+ capabilities.add('json');
47
+ capabilities.add('tools');
48
+ // structured output can't be detected from this
49
+ }
50
+ // Vision capabilities
51
+ if (input.includes('image')) {
52
+ capabilities.add('vision');
53
+ }
54
+ // Image generation
55
+ if (output.includes('image')) {
56
+ capabilities.add('image');
57
+ }
58
+ // Audio capabilities
59
+ if (input.includes('audio')) {
60
+ capabilities.add('hearing');
61
+ }
62
+ if (output.includes('audio')) {
63
+ capabilities.add('audio');
64
+ }
65
+ // Embedding
66
+ if (output.includes('embedding') || output.includes('vector')) {
67
+ capabilities.add('embedding');
68
+ }
69
+ return capabilities;
70
+ }
71
+ /**
72
+ * Detect ZDR (Zero Data Retention) support from provider metadata
73
+ */
74
+ export function detectZDRFromModeration(isModerated) {
75
+ // If a model is NOT moderated, it typically means ZDR is supported
76
+ return !isModerated;
77
+ }
78
+ //# sourceMappingURL=modelDetection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelDetection.js","sourceRoot":"","sources":["../src/modelDetection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAE7B,iCAAiC;IACjC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IACE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QACrB,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAClB,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IACE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EACvB,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,6DAA6D;IAC7D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAC5C,QAAgB,EAChB,OAAe;IAEf,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmB,CAAC;IAChD,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAE7C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/E,oBAAoB;IACpB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,gDAAgD;IAClD,CAAC;IAED,sBAAsB;IACtB,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,YAAY;IACZ,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9D,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAoB;IAC1D,mEAAmE;IACnE,OAAO,CAAC,WAAW,CAAC;AACtB,CAAC"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Model Registry
3
+ *
4
+ * Centralized model management with provider ordering and adapter registration.
5
+ * Provider order ensures deterministic model resolution: first provider to return a model ID wins.
6
+ */
7
+ import type { AIBaseMetadata, ModelCapability, ModelHandler, ModelInfo, ModelOverride, ModelSelectionWeights, ModelSource, Provider, Providers, ScoredModel, SelectedModel } from './types';
8
+ /**
9
+ * Determines which capabilities a provider supports based on its defined methods.
10
+ * Treats streaming and non-streaming methods as equivalent for capability detection.
11
+ *
12
+ * This is useful for:
13
+ * - Filtering providers during model selection
14
+ * - Validating provider compatibility before requests
15
+ * - Displaying provider capabilities in UI
16
+ *
17
+ * @param provider - The provider to inspect
18
+ * @returns Set of capabilities the provider supports
19
+ *
20
+ * @example Basic usage
21
+ * ```typescript
22
+ * import { OpenAIProvider } from '@aeye/openai';
23
+ * import { getProviderCapabilities } from '@aeye/ai';
24
+ *
25
+ * const openai = new OpenAIProvider({ apiKey: '...' });
26
+ * const caps = getProviderCapabilities(openai);
27
+ * console.log(caps);
28
+ * // Set(['chat', 'streaming', 'image', 'audio', 'hearing', 'embedding'])
29
+ * ```
30
+ *
31
+ * @example Checking specific capability
32
+ * ```typescript
33
+ * const openrouter = new OpenRouterProvider({ apiKey: '...' });
34
+ * const caps = getProviderCapabilities(openrouter);
35
+ *
36
+ * if (caps.has('image')) {
37
+ * console.log('Provider supports image generation');
38
+ * } else {
39
+ * console.log('Provider does not support image generation');
40
+ * }
41
+ * // Output: "Provider does not support image generation"
42
+ * ```
43
+ *
44
+ * @example Filtering providers by capability
45
+ * ```typescript
46
+ * const providers = { openai, openrouter, anthropic };
47
+ * const imageProviders = Object.entries(providers)
48
+ * .filter(([name, provider]) => getProviderCapabilities(provider).has('image'))
49
+ * .map(([name]) => name);
50
+ * console.log(imageProviders); // ['openai']
51
+ * ```
52
+ */
53
+ export declare function getProviderCapabilities(provider: Provider): Set<ModelCapability>;
54
+ export declare class ModelRegistry<TProviders extends Providers, TProviderKey extends keyof TProviders & string = keyof TProviders & string, TProvider extends TProviders[TProviderKey] = TProviders[TProviderKey]> {
55
+ private models;
56
+ private modelHandlers;
57
+ private providers;
58
+ private providerCapabilities;
59
+ private modelSources;
60
+ private modelOverrides;
61
+ private defaultCostPerMillionTokens;
62
+ private defaultWeights?;
63
+ private weightProfiles;
64
+ constructor(providers: TProviders, modelOverrides?: ModelOverride[], defaultCostPerMillionTokens?: number, modelSources?: ModelSource[], defaultWeights?: ModelSelectionWeights, weightProfiles?: Record<string, ModelSelectionWeights>);
65
+ /**
66
+ * Add model sources to the registry
67
+ */
68
+ addModelSources(sources: ModelSource[]): void;
69
+ /**
70
+ * Register a model in the registry
71
+ *
72
+ * Always registers under two keys:
73
+ * - model.id (e.g., "gpt-4" or "openai/gpt-4")
74
+ * - provider/model.id (e.g., "openai/gpt-4" or "openrouter/openai/gpt-4")
75
+ *
76
+ * On collision, models are merged
77
+ */
78
+ registerModel(model: ModelInfo<TProviderKey>): void;
79
+ /**
80
+ * Register multiple models
81
+ */
82
+ registerModels(models: ModelInfo<TProviderKey>[]): void;
83
+ /**
84
+ * Get a model by ID (checks all providers in order)
85
+ */
86
+ getModel(id: string): ModelInfo<TProviderKey> | undefined;
87
+ /**
88
+ * Gets the provider to use for a given model ID
89
+ *
90
+ * @param id
91
+ * @returns
92
+ */
93
+ getProviderFor(id: string): [TProviderKey, TProvider] | [];
94
+ /**
95
+ * List all models
96
+ */
97
+ listModels(): ModelInfo<TProviderKey>[];
98
+ /**
99
+ * List models for which we have providers
100
+ */
101
+ providedModels(): ModelInfo<TProviderKey>[];
102
+ /**
103
+ * Search and score models based on criteria
104
+ */
105
+ searchModels(metadata: AIBaseMetadata<TProviders>): ScoredModel<TProviderKey>[];
106
+ /**
107
+ * Select best model based on criteria
108
+ */
109
+ selectModel(criteria: AIBaseMetadata<TProviders>): SelectedModel<TProviders, TProviderKey> | undefined;
110
+ /**
111
+ * Register a model handler
112
+ */
113
+ registerHandler(handler: ModelHandler<any>): void;
114
+ /**
115
+ * Get handler for a model
116
+ */
117
+ getHandler(provider: string, model: string): ModelHandler | undefined;
118
+ /**
119
+ * Get provider info
120
+ */
121
+ getProvider(name: TProviderKey): TProvider | undefined;
122
+ /**
123
+ * Get pre-computed capabilities for a provider
124
+ * @param name - Provider name
125
+ * @returns Set of capabilities the provider supports, or undefined if provider not found
126
+ */
127
+ getProviderCapabilities(name: TProviderKey): Set<ModelCapability> | undefined;
128
+ /**
129
+ * Score a model against criteria
130
+ */
131
+ private scoreModel;
132
+ /**
133
+ * Calculate weighted score for a model
134
+ */
135
+ private calculateWeightedScore;
136
+ /**
137
+ * Apply overrides to a model
138
+ */
139
+ private applyOverrides;
140
+ /**
141
+ * Merge two ModelInfo objects intelligently
142
+ * Prefers non-default values and combines capabilities
143
+ */
144
+ private mergeModelInfo;
145
+ /**
146
+ * Refresh models from all providers and model sources
147
+ */
148
+ refresh(): Promise<void>;
149
+ }
150
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,YAAY,EACZ,SAAS,EACT,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,QAAQ,EACR,SAAS,EACT,WAAW,EACX,aAAa,EACd,MAAM,SAAS,CAAC;AAMjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,CAiEhF;AAMD,qBAAa,aAAa,CACxB,UAAU,SAAS,SAAS,EAC5B,YAAY,SAAS,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,UAAU,GAAG,MAAM,EAC1E,SAAS,SAAS,UAAU,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC;IAGrE,OAAO,CAAC,MAAM,CAAmD;IACjE,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,oBAAoB,CAAsD;IAClF,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,2BAA2B,CAAS;IAC5C,OAAO,CAAC,cAAc,CAAC,CAAwB;IAC/C,OAAO,CAAC,cAAc,CAAwC;gBAG5D,SAAS,EAAE,UAAU,EACrB,cAAc,GAAE,aAAa,EAAO,EACpC,2BAA2B,GAAE,MAAY,EACzC,YAAY,GAAE,WAAW,EAAO,EAChC,cAAc,CAAC,EAAE,qBAAqB,EACtC,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAM;IAmB5D;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI;IAI7C;;;;;;;;OAQG;IACH,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI;IAqBnD;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI;IAMvD;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS;IAuBzD;;;;;OAKG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,EAAE;IAmB1D;;OAEG;IACH,UAAU,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE;IAIvC;;OAEG;IACH,cAAc,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE;IAI3C;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,EAAE;IAmB/E;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,SAAS;IA+EtG;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI;IAIjD;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIrE;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS;IAItD;;;;OAIG;IACH,uBAAuB,CAAC,IAAI,EAAE,YAAY,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,SAAS;IAI7E;;OAEG;IACH,OAAO,CAAC,UAAU;IAoGlB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+E9B;;OAEG;IACH,OAAO,CAAC,cAAc;IA6BtB;;;OAGG;IACH,OAAO,CAAC,cAAc;IA8BtB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA+E/B"}