@genesislcap/foundation-ai 14.407.0 → 14.408.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.
- package/dist/dts/ai-provider.d.ts +18 -2
- package/dist/dts/ai-provider.d.ts.map +1 -1
- package/dist/dts/index.d.ts +5 -1
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/interactions/criteria-interpretation.d.ts +11 -0
- package/dist/dts/interactions/criteria-interpretation.d.ts.map +1 -1
- package/dist/dts/providers/gemini-provider.d.ts +25 -0
- package/dist/dts/providers/gemini-provider.d.ts.map +1 -0
- package/dist/dts/transports/gemini-transport.d.ts +66 -0
- package/dist/dts/transports/gemini-transport.d.ts.map +1 -0
- package/dist/dts/types/chat-transport.types.d.ts +16 -0
- package/dist/dts/types/chat-transport.types.d.ts.map +1 -0
- package/dist/dts/types/chat.types.d.ts +157 -0
- package/dist/dts/types/chat.types.d.ts.map +1 -0
- package/dist/dts/types/config.types.d.ts +16 -2
- package/dist/dts/types/config.types.d.ts.map +1 -1
- package/dist/dts/types/criteria-types.d.ts +10 -0
- package/dist/dts/types/criteria-types.d.ts.map +1 -1
- package/dist/dts/types/index.d.ts +2 -0
- package/dist/dts/types/index.d.ts.map +1 -1
- package/dist/dts/utils/speech-to-text.d.ts +11 -0
- package/dist/dts/utils/speech-to-text.d.ts.map +1 -1
- package/dist/esm/ai-provider.js +18 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/providers/gemini-provider.js +59 -0
- package/dist/esm/transports/gemini-transport.js +249 -0
- package/dist/esm/types/chat-transport.types.js +1 -0
- package/dist/esm/types/chat.types.js +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/utils/speech-to-text.js +11 -0
- package/dist/foundation-ai.api.json +2937 -240
- package/dist/foundation-ai.d.ts +357 -4
- package/docs/api/foundation-ai.aiconfig.md +2 -2
- package/docs/api/foundation-ai.aiprovider.chat.md +85 -0
- package/docs/api/foundation-ai.aiprovider.md +22 -0
- package/docs/api/foundation-ai.aiprovider.streamchat.md +85 -0
- package/docs/api/foundation-ai.aiprovidertype.md +1 -1
- package/docs/api/foundation-ai.chatanimationsconfig.enabled.md +16 -0
- package/docs/api/foundation-ai.chatanimationsconfig.md +80 -0
- package/docs/api/foundation-ai.chatanimationsconfig.userconfigurable.md +16 -0
- package/docs/api/foundation-ai.chatattachment.content.md +14 -0
- package/docs/api/foundation-ai.chatattachment.md +99 -0
- package/docs/api/foundation-ai.chatattachment.mimetype.md +14 -0
- package/docs/api/foundation-ai.chatattachment.name.md +14 -0
- package/docs/api/foundation-ai.chatconfig.acceptedfiles.md +16 -0
- package/docs/api/foundation-ai.chatconfig.allowdebugdownload.md +16 -0
- package/docs/api/foundation-ai.chatconfig.animations.md +16 -0
- package/docs/api/foundation-ai.chatconfig.loadingdelay.md +16 -0
- package/docs/api/foundation-ai.chatconfig.maxtooliterations.md +16 -0
- package/docs/api/foundation-ai.chatconfig.md +177 -0
- package/docs/api/foundation-ai.chatconfig.showthinkingsteps.md +16 -0
- package/docs/api/foundation-ai.chatconfig.showtoolcalls.md +16 -0
- package/docs/api/foundation-ai.chatinteraction.componentname.md +14 -0
- package/docs/api/foundation-ai.chatinteraction.data.md +14 -0
- package/docs/api/foundation-ai.chatinteraction.interactionid.md +14 -0
- package/docs/api/foundation-ai.chatinteraction.md +118 -0
- package/docs/api/foundation-ai.chatinteraction.resolved.md +16 -0
- package/docs/api/foundation-ai.chatmessage.attachments.md +14 -0
- package/docs/api/foundation-ai.chatmessage.content.md +14 -0
- package/docs/api/foundation-ai.chatmessage.interaction.md +14 -0
- package/docs/api/foundation-ai.chatmessage.md +175 -0
- package/docs/api/foundation-ai.chatmessage.role.md +14 -0
- package/docs/api/foundation-ai.chatmessage.thinking.md +14 -0
- package/docs/api/foundation-ai.chatmessage.toolcalls.md +14 -0
- package/docs/api/foundation-ai.chatmessage.toolresult.md +14 -0
- package/docs/api/foundation-ai.chatrequestoptions.attachments.md +14 -0
- package/docs/api/foundation-ai.chatrequestoptions.md +118 -0
- package/docs/api/foundation-ai.chatrequestoptions.signal.md +14 -0
- package/docs/api/foundation-ai.chatrequestoptions.systemprompt.md +14 -0
- package/docs/api/foundation-ai.chatrequestoptions.tools.md +14 -0
- package/docs/api/foundation-ai.chatrole.md +16 -0
- package/docs/api/foundation-ai.chatstreamchunk.delta.md +14 -0
- package/docs/api/foundation-ai.chatstreamchunk.done.md +14 -0
- package/docs/api/foundation-ai.chatstreamchunk.md +99 -0
- package/docs/api/foundation-ai.chatstreamchunk.toolcalls.md +14 -0
- package/docs/api/foundation-ai.chattoolcall.args.md +14 -0
- package/docs/api/foundation-ai.chattoolcall.id.md +14 -0
- package/docs/api/foundation-ai.chattoolcall.md +99 -0
- package/docs/api/foundation-ai.chattoolcall.name.md +14 -0
- package/docs/api/foundation-ai.chattooldefinition.description.md +14 -0
- package/docs/api/foundation-ai.chattooldefinition.md +99 -0
- package/docs/api/foundation-ai.chattooldefinition.name.md +14 -0
- package/docs/api/foundation-ai.chattooldefinition.parameters.md +14 -0
- package/docs/api/foundation-ai.chattoolhandlers.md +18 -0
- package/docs/api/foundation-ai.chattoolresult.content.md +14 -0
- package/docs/api/foundation-ai.chattoolresult.md +80 -0
- package/docs/api/foundation-ai.chattoolresult.toolcallid.md +14 -0
- package/docs/api/foundation-ai.chattransport.md +58 -0
- package/docs/api/foundation-ai.chattransport.sendchatmessage.md +83 -0
- package/docs/api/foundation-ai.chattransport.streamchatmessage.md +83 -0
- package/docs/api/foundation-ai.criteriagroupresult.clauses.md +3 -0
- package/docs/api/foundation-ai.criteriagroupresult.logic.md +3 -0
- package/docs/api/foundation-ai.criteriagroupresult.md +10 -1
- package/docs/api/foundation-ai.criteriagroupresult.negated.md +3 -0
- package/docs/api/foundation-ai.criteriainterpretationresult.groups.md +3 -0
- package/docs/api/foundation-ai.criteriainterpretationresult.md +7 -0
- package/docs/api/foundation-ai.criteriainterpretcontext.fields.md +3 -0
- package/docs/api/foundation-ai.criteriainterpretcontext.md +6 -1
- package/docs/api/foundation-ai.fieldlike.md +5 -0
- package/docs/api/foundation-ai.geminiaiconfig.apikey.md +14 -0
- package/docs/api/foundation-ai.geminiaiconfig.md +123 -0
- package/docs/api/foundation-ai.geminiaiconfig.model.md +14 -0
- package/docs/api/foundation-ai.geminiaiconfig.providertype.md +14 -0
- package/docs/api/foundation-ai.geminiaiconfig.serverendpoint.md +14 -0
- package/docs/api/foundation-ai.geminiprovider._constructor_.md +65 -0
- package/docs/api/foundation-ai.geminiprovider.chat.md +83 -0
- package/docs/api/foundation-ai.geminiprovider.getstatus.md +18 -0
- package/docs/api/foundation-ai.geminiprovider.interpretcriteria.md +67 -0
- package/docs/api/foundation-ai.geminiprovider.md +128 -0
- package/docs/api/foundation-ai.geminiprovider.streamchat.md +83 -0
- package/docs/api/foundation-ai.geminitransport._constructor_.md +53 -0
- package/docs/api/foundation-ai.geminitransport.getconfig.md +21 -0
- package/docs/api/foundation-ai.geminitransport.md +116 -0
- package/docs/api/foundation-ai.geminitransport.sendchatmessage.md +83 -0
- package/docs/api/foundation-ai.geminitransport.sendstructuredprompt.md +53 -0
- package/docs/api/foundation-ai.interactionresult.md +20 -0
- package/docs/api/foundation-ai.isspeechrecognitionavailable.md +1 -1
- package/docs/api/foundation-ai.malformedfunctioncallerror._constructor_.md +53 -0
- package/docs/api/foundation-ai.malformedfunctioncallerror.finishmessage.md +14 -0
- package/docs/api/foundation-ai.malformedfunctioncallerror.md +98 -0
- package/docs/api/foundation-ai.md +230 -1
- package/docs/api/foundation-ai.resolveaiconfigoptions.md +9 -4
- package/docs/api/foundation-ai.resolveaiconfigoptions.model.md +3 -0
- package/docs/api/foundation-ai.resolveaiconfigoptions.preferchrome.md +3 -0
- package/docs/api/foundation-ai.resolveaiconfigoptions.provider.md +5 -2
- package/docs/api/foundation-ai.startspeechrecognition.md +5 -0
- package/docs/api-report.md.api.md +192 -11
- package/package.json +11 -11
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CriteriaInterpretContext } from './interactions';
|
|
2
2
|
import type { AIConfig, AIStatus, CriteriaInterpretationResult } from './types';
|
|
3
|
+
import type { ChatMessage, ChatRequestOptions, ChatStreamChunk } from './types/chat.types';
|
|
3
4
|
/**
|
|
4
5
|
* AI Provider interface for foundation-ai.
|
|
5
6
|
*
|
|
@@ -20,6 +21,16 @@ export interface AIProvider {
|
|
|
20
21
|
* Must be called from a user gesture (e.g. click).
|
|
21
22
|
*/
|
|
22
23
|
triggerDownload?(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Multi-turn chat (non-streaming). Returns the assistant's response message.
|
|
26
|
+
* Providers that support chat (Gemini, OpenAI) implement this.
|
|
27
|
+
*/
|
|
28
|
+
chat?(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): Promise<ChatMessage>;
|
|
29
|
+
/**
|
|
30
|
+
* Multi-turn chat (streaming). Yields chunks as they arrive.
|
|
31
|
+
* Providers that support streaming implement this.
|
|
32
|
+
*/
|
|
33
|
+
streamChat?(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): AsyncIterable<ChatStreamChunk>;
|
|
23
34
|
}
|
|
24
35
|
/**
|
|
25
36
|
* Creates an AIProvider from config.
|
|
@@ -31,9 +42,14 @@ export interface AIProvider {
|
|
|
31
42
|
* @beta
|
|
32
43
|
*/
|
|
33
44
|
export declare function createAIProvider(config?: AIConfig | null): AIProvider;
|
|
45
|
+
/**
|
|
46
|
+
* Options for {@link resolveAIConfig}.
|
|
47
|
+
*
|
|
48
|
+
* @beta
|
|
49
|
+
*/
|
|
34
50
|
export interface ResolveAIConfigOptions {
|
|
35
|
-
/** Cloud provider (openai). Default: openai */
|
|
36
|
-
provider?: 'openai';
|
|
51
|
+
/** Cloud provider (openai, gemini). Default: openai */
|
|
52
|
+
provider?: 'openai' | 'gemini';
|
|
37
53
|
/** Model name (e.g. gpt-4o-mini). Default: gpt-4o-mini */
|
|
38
54
|
model?: string;
|
|
39
55
|
/** Prefer Chrome built-in AI when available */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-provider.d.ts","sourceRoot":"","sources":["../../src/ai-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-provider.d.ts","sourceRoot":"","sources":["../../src/ai-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAQ/D,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EAER,4BAA4B,EAG7B,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI3F;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,iBAAiB,CAAC,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEvC;;;OAGG;IACH,eAAe,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,IAAI,CAAC,CACH,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB;;;OAGG;IACH,UAAU,CAAC,CACT,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,aAAa,CAAC,eAAe,CAAC,CAAC;CACnC;AAcD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU,CAmCrE;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA0B1B;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,kEAAwE,CAAC;AAEhG;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAM1C"}
|
package/dist/dts/index.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export { AIProvider, createAIProvider, getAIProvider, resolveAIConfig } from './ai-provider';
|
|
2
|
+
export { GeminiProvider } from './providers/gemini-provider';
|
|
3
|
+
export { GeminiTransport, MalformedFunctionCallError } from './transports/gemini-transport';
|
|
2
4
|
export { AI_FEATURE_FLAG, isAIFeatureEnabled } from './utils/feature-flags';
|
|
3
|
-
export type { AIConfig, AIStatus, AIProviderType, ChromeAIConfig, ChromeAvailability, ServerAIConfig, } from './types';
|
|
5
|
+
export type { AIConfig, AIStatus, AIProviderType, ChromeAIConfig, ChromeAvailability, GeminiAIConfig, ServerAIConfig, } from './types';
|
|
6
|
+
export type { ChatAnimationsConfig, ChatAttachment, ChatConfig, ChatMessage, ChatInteraction, ChatRequestOptions, ChatRole, ChatStreamChunk, ChatToolCall, ChatToolDefinition, ChatToolHandlers, ChatToolResult, InteractionResult, } from './types/chat.types';
|
|
7
|
+
export type { ChatTransport } from './types/chat-transport.types';
|
|
4
8
|
export type { ResolveAIConfigOptions } from './ai-provider';
|
|
5
9
|
export type { CriteriaInterpretContext, FieldLike } from './interactions';
|
|
6
10
|
export type { CriteriaClauseResult, CriteriaGroupResult, CriteriaInterpretationResult, } from './types/criteria-types';
|
package/dist/dts/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1E,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1E,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -115,12 +115,23 @@ export declare const OPENAI_CRITERIA_RESPONSE_FORMAT: {
|
|
|
115
115
|
};
|
|
116
116
|
};
|
|
117
117
|
};
|
|
118
|
+
/**
|
|
119
|
+
* A field descriptor accepted by criteria interpretation utilities.
|
|
120
|
+
* Can be a plain string name or an object with common field metadata properties.
|
|
121
|
+
*
|
|
122
|
+
* @beta
|
|
123
|
+
*/
|
|
118
124
|
export type FieldLike = string | {
|
|
119
125
|
name?: string;
|
|
120
126
|
field?: string;
|
|
121
127
|
label?: string;
|
|
122
128
|
NAME?: string;
|
|
123
129
|
};
|
|
130
|
+
/**
|
|
131
|
+
* Context passed to criteria interpretation, providing available field metadata.
|
|
132
|
+
*
|
|
133
|
+
* @beta
|
|
134
|
+
*/
|
|
124
135
|
export interface CriteriaInterpretContext {
|
|
125
136
|
fields?: FieldLike[];
|
|
126
137
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteria-interpretation.d.ts","sourceRoot":"","sources":["../../../src/interactions/criteria-interpretation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAwC7D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BvB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOlC,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElG,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAUD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,GAAE,SAAS,EAAO,EACxB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAaR;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,4BAA4B,GAAG,IAAI,CAkBrC"}
|
|
1
|
+
{"version":3,"file":"criteria-interpretation.d.ts","sourceRoot":"","sources":["../../../src/interactions/criteria-interpretation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAwC7D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BvB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOlC,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElG;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAUD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,GAAE,SAAS,EAAO,EACxB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,CAaR;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,4BAA4B,GAAG,IAAI,CAkBrC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AIProvider } from '../ai-provider';
|
|
2
|
+
import type { CriteriaInterpretContext } from '../interactions';
|
|
3
|
+
import { GeminiTransport } from '../transports/gemini-transport';
|
|
4
|
+
import type { AIStatus } from '../types';
|
|
5
|
+
import type { ChatMessage, ChatRequestOptions, ChatStreamChunk } from '../types/chat.types';
|
|
6
|
+
import type { CriteriaInterpretationResult } from '../types/criteria-types';
|
|
7
|
+
export interface GeminiProviderConfig {
|
|
8
|
+
criteriaInstructions?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Gemini AI provider. Uses {@link GeminiTransport} to handle requests.
|
|
12
|
+
* Implements criteria interpretation and multi-turn chat.
|
|
13
|
+
*
|
|
14
|
+
* @beta
|
|
15
|
+
*/
|
|
16
|
+
export declare class GeminiProvider implements AIProvider {
|
|
17
|
+
private readonly transport;
|
|
18
|
+
private readonly criteriaInstructions?;
|
|
19
|
+
constructor(config: GeminiProviderConfig, transport: GeminiTransport);
|
|
20
|
+
getStatus(): Promise<AIStatus>;
|
|
21
|
+
interpretCriteria(input: string, context: CriteriaInterpretContext): Promise<CriteriaInterpretationResult | null>;
|
|
22
|
+
chat(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): Promise<ChatMessage>;
|
|
23
|
+
streamChat(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): AsyncIterable<ChatStreamChunk>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=gemini-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAOhE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAG5E,MAAM,WAAW,oBAAoB;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAS;gBAEnC,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,eAAe;IAK9D,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC;IAK9B,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC;IAkBzC,IAAI,CACR,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IAIhB,UAAU,CACf,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,aAAa,CAAC,eAAe,CAAC;CAYlC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { AITransport, StructuredPromptOptions } from '../types';
|
|
2
|
+
import type { ChatTransport } from '../types/chat-transport.types';
|
|
3
|
+
import type { ChatMessage, ChatRequestOptions } from '../types/chat.types';
|
|
4
|
+
export interface GeminiTransportConfig {
|
|
5
|
+
model?: string;
|
|
6
|
+
timeout?: number;
|
|
7
|
+
/**
|
|
8
|
+
* API key for direct calls to the Gemini API.
|
|
9
|
+
* Must be provided explicitly; callers are responsible for reading it from
|
|
10
|
+
* their environment (e.g. a build-time injected global).
|
|
11
|
+
*/
|
|
12
|
+
apiKey?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Server-proxy endpoint (e.g. `/gwf/ai-service/gemini/chat`).
|
|
15
|
+
* Only used when no API key is available. When omitted and no API key
|
|
16
|
+
* is found, requests will fail.
|
|
17
|
+
*/
|
|
18
|
+
serverEndpoint?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Thrown when Gemini returns a `MALFORMED_FUNCTION_CALL` finish reason,
|
|
22
|
+
* typically because the model tried to batch multiple tool calls using
|
|
23
|
+
* Python-style syntax instead of the proper API format.
|
|
24
|
+
*
|
|
25
|
+
* @beta
|
|
26
|
+
*/
|
|
27
|
+
export declare class MalformedFunctionCallError extends Error {
|
|
28
|
+
readonly finishMessage?: string;
|
|
29
|
+
constructor(finishMessage?: string);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Transport for Gemini. Calls the Gemini REST API directly when `apiKey` is
|
|
33
|
+
* provided, otherwise falls back to a server-proxy endpoint (if `serverEndpoint`
|
|
34
|
+
* is configured).
|
|
35
|
+
*
|
|
36
|
+
* Implements `AITransport` (structured prompt) and `ChatTransport` (multi-turn chat).
|
|
37
|
+
*
|
|
38
|
+
* @beta
|
|
39
|
+
*/
|
|
40
|
+
export declare class GeminiTransport implements AITransport, ChatTransport {
|
|
41
|
+
private readonly model;
|
|
42
|
+
private readonly timeout;
|
|
43
|
+
private readonly apiKey;
|
|
44
|
+
private readonly serverEndpoint;
|
|
45
|
+
constructor(config?: GeminiTransportConfig);
|
|
46
|
+
getConfig(): {
|
|
47
|
+
provider: 'gemini';
|
|
48
|
+
model: string;
|
|
49
|
+
};
|
|
50
|
+
sendStructuredPrompt(options: StructuredPromptOptions): Promise<string>;
|
|
51
|
+
sendChatMessage(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): Promise<ChatMessage>;
|
|
52
|
+
private static readonly TOKENS_PER_MILLION;
|
|
53
|
+
private static readonly PROMPT_COST_PER_MILLION;
|
|
54
|
+
private static readonly CANDIDATE_COST_PER_MILLION;
|
|
55
|
+
private static readonly COST_DECIMAL_PLACES;
|
|
56
|
+
private logTokenUsage;
|
|
57
|
+
private toGeminiContents;
|
|
58
|
+
private fromGeminiResponse;
|
|
59
|
+
private buildEndpoint;
|
|
60
|
+
private static readonly MAX_RETRIES;
|
|
61
|
+
private static readonly RATE_LIMIT_STATUS;
|
|
62
|
+
private static readonly BACKOFF_BASE_MS;
|
|
63
|
+
private post;
|
|
64
|
+
private toDirectPayload;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=gemini-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-transport.d.ts","sourceRoot":"","sources":["../../../src/transports/gemini-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAEV,WAAW,EACX,kBAAkB,EAEnB,MAAM,qBAAqB,CAAC;AAO7B,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAUD;;;;;;GAMG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM;gBAAtB,aAAa,CAAC,EAAE,MAAM;CAI5C;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAgB,YAAW,WAAW,EAAE,aAAa;IAChE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;gBAExC,MAAM,GAAE,qBAA0B;IAQ9C,SAAS,IAAI;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAM5C,oBAAoB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBvE,eAAe,CACnB,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC;IA4BvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAa;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAO;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAO;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IAEhD,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,gBAAgB;IAgDxB,OAAO,CAAC,kBAAkB;IAwD1B,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAQ;YAEjC,IAAI;IAgDlB,OAAO,CAAC,eAAe;CAexB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ChatMessage, ChatRequestOptions, ChatStreamChunk } from './chat.types';
|
|
2
|
+
/**
|
|
3
|
+
* Transport interface for chat-capable AI providers.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Implement alongside `AITransport` for providers that support multi-turn chat
|
|
7
|
+
* conversations (e.g. Gemini, OpenAI). The `streamChatMessage` method is optional —
|
|
8
|
+
* providers that don't support streaming may omit it.
|
|
9
|
+
*
|
|
10
|
+
* @beta
|
|
11
|
+
*/
|
|
12
|
+
export interface ChatTransport {
|
|
13
|
+
sendChatMessage(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): Promise<ChatMessage>;
|
|
14
|
+
streamChatMessage?(history: ChatMessage[], userMessage: string, options?: ChatRequestOptions): AsyncIterable<ChatStreamChunk>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=chat-transport.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-transport.types.d.ts","sourceRoot":"","sources":["../../../src/types/chat-transport.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAErF;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,eAAe,CACb,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB,iBAAiB,CAAC,CAChB,OAAO,EAAE,WAAW,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,aAAa,CAAC,eAAe,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Role of a message in a chat conversation.
|
|
3
|
+
*
|
|
4
|
+
* @beta
|
|
5
|
+
*/
|
|
6
|
+
export type ChatRole = 'user' | 'assistant' | 'system' | 'tool';
|
|
7
|
+
/**
|
|
8
|
+
* A tool call requested by the assistant.
|
|
9
|
+
*
|
|
10
|
+
* @beta
|
|
11
|
+
*/
|
|
12
|
+
export interface ChatToolCall {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
args: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The result of executing a tool call.
|
|
19
|
+
*
|
|
20
|
+
* @beta
|
|
21
|
+
*/
|
|
22
|
+
export interface ChatToolResult {
|
|
23
|
+
toolCallId: string;
|
|
24
|
+
content: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The result of a user interaction component.
|
|
28
|
+
*
|
|
29
|
+
* @beta
|
|
30
|
+
*/
|
|
31
|
+
export type InteractionResult<T = unknown> = {
|
|
32
|
+
status: 'approved' | 'rejected';
|
|
33
|
+
payload?: T;
|
|
34
|
+
message?: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* A user interaction component request.
|
|
38
|
+
*
|
|
39
|
+
* @beta
|
|
40
|
+
*/
|
|
41
|
+
export interface ChatInteraction {
|
|
42
|
+
interactionId: string;
|
|
43
|
+
componentName: string;
|
|
44
|
+
data: any;
|
|
45
|
+
/** Set to true once the interaction has been resolved. Used to render a read-only state on re-render. */
|
|
46
|
+
resolved?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A file attachment included with a user message.
|
|
50
|
+
*
|
|
51
|
+
* @beta
|
|
52
|
+
*/
|
|
53
|
+
export interface ChatAttachment {
|
|
54
|
+
name: string;
|
|
55
|
+
content: string;
|
|
56
|
+
mimeType: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A single message in a chat conversation.
|
|
60
|
+
*
|
|
61
|
+
* @beta
|
|
62
|
+
*/
|
|
63
|
+
export interface ChatMessage {
|
|
64
|
+
role: ChatRole;
|
|
65
|
+
content: string;
|
|
66
|
+
toolCalls?: ChatToolCall[];
|
|
67
|
+
toolResult?: ChatToolResult;
|
|
68
|
+
attachments?: ChatAttachment[];
|
|
69
|
+
interaction?: ChatInteraction;
|
|
70
|
+
thinking?: boolean;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* JSON Schema-based tool definition for function calling.
|
|
74
|
+
*
|
|
75
|
+
* @beta
|
|
76
|
+
*/
|
|
77
|
+
export interface ChatToolDefinition {
|
|
78
|
+
name: string;
|
|
79
|
+
description: string;
|
|
80
|
+
parameters: Record<string, unknown>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Map of tool name to async handler function.
|
|
84
|
+
*
|
|
85
|
+
* @beta
|
|
86
|
+
*/
|
|
87
|
+
export type ChatToolHandlers = Record<string, (args: Record<string, unknown>, context: {
|
|
88
|
+
requestInteraction: <T = unknown>(componentName: string, data: any) => Promise<T>;
|
|
89
|
+
}) => Promise<unknown>>;
|
|
90
|
+
/**
|
|
91
|
+
* Options for a chat request.
|
|
92
|
+
*
|
|
93
|
+
* @beta
|
|
94
|
+
*/
|
|
95
|
+
export interface ChatRequestOptions {
|
|
96
|
+
systemPrompt?: string;
|
|
97
|
+
tools?: ChatToolDefinition[];
|
|
98
|
+
attachments?: ChatAttachment[];
|
|
99
|
+
signal?: AbortSignal;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* A streaming chunk from a chat response.
|
|
103
|
+
*
|
|
104
|
+
* @beta
|
|
105
|
+
*/
|
|
106
|
+
export interface ChatStreamChunk {
|
|
107
|
+
delta: string;
|
|
108
|
+
done: boolean;
|
|
109
|
+
toolCalls?: ChatToolCall[];
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Configuration for the animations feature.
|
|
113
|
+
*
|
|
114
|
+
* @beta
|
|
115
|
+
*/
|
|
116
|
+
export interface ChatAnimationsConfig {
|
|
117
|
+
/**
|
|
118
|
+
* When true, a multiselect control is shown in the settings panel so the
|
|
119
|
+
* user can toggle individual animations on or off.
|
|
120
|
+
*/
|
|
121
|
+
userConfigurable: boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Initially enabled animations. When omitted all animations are enabled by
|
|
124
|
+
* default.
|
|
125
|
+
*/
|
|
126
|
+
enabled?: string[];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Display and behaviour configuration for the chat assistant.
|
|
130
|
+
*
|
|
131
|
+
* For toggle flags (`showToolCalls`, `showThinkingSteps`):
|
|
132
|
+
* - `true` — default on, user can toggle off
|
|
133
|
+
* - `false` — default off, user can toggle on
|
|
134
|
+
* - `null` / `undefined` — completely disabled, no UI control shown
|
|
135
|
+
*
|
|
136
|
+
* @beta
|
|
137
|
+
*/
|
|
138
|
+
export interface ChatConfig {
|
|
139
|
+
/** Show tool call details in the chat UI. */
|
|
140
|
+
showToolCalls?: boolean | null;
|
|
141
|
+
/** Show model thinking/reasoning steps. */
|
|
142
|
+
showThinkingSteps?: boolean | null;
|
|
143
|
+
/** Show a button to download the full chat history as JSON. */
|
|
144
|
+
allowDebugDownload?: boolean;
|
|
145
|
+
/** Comma-separated list of accepted file extensions for upload, e.g., ".txt,.md,.csv". If undefined or empty, file uploads are disabled. */
|
|
146
|
+
acceptedFiles?: string;
|
|
147
|
+
/**
|
|
148
|
+
* Seconds to wait before showing the loading spinner. Default: 5.
|
|
149
|
+
* Set to 0 to show the spinner immediately when a request is in flight.
|
|
150
|
+
*/
|
|
151
|
+
loadingDelay?: number;
|
|
152
|
+
/** Animations feature configuration. */
|
|
153
|
+
animations?: ChatAnimationsConfig;
|
|
154
|
+
/** Maximum number of tool call iterations per turn. Default: 50. */
|
|
155
|
+
maxToolIterations?: number;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=chat.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.types.d.ts","sourceRoot":"","sources":["../../../src/types/chat.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @beta
|
|
5
5
|
*/
|
|
6
|
-
export type AIProviderType = 'openai' | 'chrome' | 'none';
|
|
6
|
+
export type AIProviderType = 'openai' | 'chrome' | 'gemini' | 'none';
|
|
7
7
|
/**
|
|
8
8
|
* Base provider-level configuration.
|
|
9
9
|
*
|
|
@@ -46,11 +46,25 @@ export interface ChromeAIConfig extends AIProviderConfig {
|
|
|
46
46
|
temperature?: number;
|
|
47
47
|
topK?: number;
|
|
48
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Gemini server-proxy AI configuration (client calls your server; server calls Gemini).
|
|
51
|
+
*
|
|
52
|
+
* @remarks
|
|
53
|
+
* API key stays on the server. URL defaults to /gwf/ai-service/gemini/chat.
|
|
54
|
+
*
|
|
55
|
+
* @beta
|
|
56
|
+
*/
|
|
57
|
+
export interface GeminiAIConfig extends AIProviderConfig {
|
|
58
|
+
providerType: 'gemini';
|
|
59
|
+
model?: string;
|
|
60
|
+
serverEndpoint?: string;
|
|
61
|
+
apiKey?: string;
|
|
62
|
+
}
|
|
49
63
|
/**
|
|
50
64
|
* Union type for provider-specific configs.
|
|
51
65
|
* Extend when adding new providers.
|
|
52
66
|
*
|
|
53
67
|
* @beta
|
|
54
68
|
*/
|
|
55
|
-
export type AIConfig = ServerAIConfig | ChromeAIConfig;
|
|
69
|
+
export type AIConfig = ServerAIConfig | ChromeAIConfig | GeminiAIConfig;
|
|
56
70
|
//# sourceMappingURL=config.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,6DAA6D;AAC7D,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,YAAY,EAAE,QAAQ,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,cAAc,GAAG,cAAc,CAAC"}
|
|
@@ -9,11 +9,21 @@ export interface CriteriaClauseResult {
|
|
|
9
9
|
operator: string;
|
|
10
10
|
value: string | number | boolean | null;
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* A group of criteria clauses combined by a logical operator.
|
|
14
|
+
*
|
|
15
|
+
* @beta
|
|
16
|
+
*/
|
|
12
17
|
export interface CriteriaGroupResult {
|
|
13
18
|
logic: 'and' | 'or';
|
|
14
19
|
negated?: boolean;
|
|
15
20
|
clauses: CriteriaClauseResult[];
|
|
16
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Top-level result returned by criteria interpretation.
|
|
24
|
+
*
|
|
25
|
+
* @beta
|
|
26
|
+
*/
|
|
17
27
|
export interface CriteriaInterpretationResult {
|
|
18
28
|
groups: CriteriaGroupResult[];
|
|
19
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"criteria-types.d.ts","sourceRoot":"","sources":["../../../src/types/criteria-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B"}
|
|
1
|
+
{"version":3,"file":"criteria-types.d.ts","sourceRoot":"","sources":["../../../src/types/criteria-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
|
|
@@ -4,8 +4,19 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @beta
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Returns true if the Web Speech API is available in the current environment.
|
|
9
|
+
*
|
|
10
|
+
* @beta
|
|
11
|
+
*/
|
|
7
12
|
export declare function isSpeechRecognitionAvailable(): boolean;
|
|
8
13
|
export type SpeechRecognitionResultHandler = (transcript: string, isFinal: boolean) => void;
|
|
9
14
|
export type SpeechRecognitionErrorHandler = (error: string) => void;
|
|
15
|
+
/**
|
|
16
|
+
* Starts continuous speech recognition, calling `onResult` with each transcript update.
|
|
17
|
+
* Returns a stop function, or null if speech recognition is unavailable.
|
|
18
|
+
*
|
|
19
|
+
* @beta
|
|
20
|
+
*/
|
|
10
21
|
export declare function startSpeechRecognition(onResult: SpeechRecognitionResultHandler, onError?: SpeechRecognitionErrorHandler): (() => void) | null;
|
|
11
22
|
//# sourceMappingURL=speech-to-text.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech-to-text.d.ts","sourceRoot":"","sources":["../../../src/utils/speech-to-text.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,4BAA4B,IAAI,OAAO,CAKtD;AAED,MAAM,MAAM,8BAA8B,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAC5F,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEpE,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,8BAA8B,EACxC,OAAO,CAAC,EAAE,6BAA6B,GACtC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAmDrB"}
|
|
1
|
+
{"version":3,"file":"speech-to-text.d.ts","sourceRoot":"","sources":["../../../src/utils/speech-to-text.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAKtD;AAED,MAAM,MAAM,8BAA8B,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAC5F,MAAM,MAAM,6BAA6B,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAEpE;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,8BAA8B,EACxC,OAAO,CAAC,EAAE,6BAA6B,GACtC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAmDrB"}
|
package/dist/esm/ai-provider.js
CHANGED
|
@@ -2,14 +2,19 @@ import { __awaiter } from "tslib";
|
|
|
2
2
|
import { DI } from '@microsoft/fast-foundation';
|
|
3
3
|
import { ChromeProvider } from './providers/chrome-provider';
|
|
4
4
|
import { DefaultAIProvider } from './providers/default-provider';
|
|
5
|
+
import { GeminiProvider } from './providers/gemini-provider';
|
|
5
6
|
import { OpenAIProvider } from './providers/openai-provider';
|
|
6
7
|
import { ChromePromptTransport } from './transports/chrome-prompt-transport';
|
|
8
|
+
import { GeminiTransport } from './transports/gemini-transport';
|
|
7
9
|
import { ServerOpenAITransport } from './transports/server-openai-transport';
|
|
8
10
|
import { logger } from './utils';
|
|
9
11
|
import { isAIFeatureEnabled } from './utils/feature-flags';
|
|
10
12
|
function isChromeConfig(config) {
|
|
11
13
|
return 'providerType' in config && config.providerType === 'chrome';
|
|
12
14
|
}
|
|
15
|
+
function isGeminiConfig(config) {
|
|
16
|
+
return 'providerType' in config && config.providerType === 'gemini';
|
|
17
|
+
}
|
|
13
18
|
function isServerAIConfig(config) {
|
|
14
19
|
return !!config.provider;
|
|
15
20
|
}
|
|
@@ -31,6 +36,16 @@ export function createAIProvider(config) {
|
|
|
31
36
|
logger.debug('createAIProvider: using ChromeProvider');
|
|
32
37
|
return new ChromeProvider(config);
|
|
33
38
|
}
|
|
39
|
+
if (config && isGeminiConfig(config)) {
|
|
40
|
+
logger.debug('createAIProvider: using GeminiProvider');
|
|
41
|
+
const transport = new GeminiTransport({
|
|
42
|
+
model: config.model,
|
|
43
|
+
timeout: config.timeout,
|
|
44
|
+
serverEndpoint: config.serverEndpoint,
|
|
45
|
+
apiKey: config.apiKey,
|
|
46
|
+
});
|
|
47
|
+
return new GeminiProvider({ criteriaInstructions: config.criteriaInstructions }, transport);
|
|
48
|
+
}
|
|
34
49
|
if (config && isServerAIConfig(config)) {
|
|
35
50
|
if (config.provider !== 'openai') {
|
|
36
51
|
logger.warn('createAIProvider: only openai server provider supported for now, using default');
|
|
@@ -70,6 +85,9 @@ export function resolveAIConfig() {
|
|
|
70
85
|
}
|
|
71
86
|
logger.warn('resolveAIConfig: Chrome not available', availability);
|
|
72
87
|
}
|
|
88
|
+
if (provider === 'gemini') {
|
|
89
|
+
return { providerType: 'gemini', model };
|
|
90
|
+
}
|
|
73
91
|
return { provider, model };
|
|
74
92
|
});
|
|
75
93
|
}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { AIProvider, createAIProvider, getAIProvider, resolveAIConfig } from './ai-provider';
|
|
2
|
+
export { GeminiProvider } from './providers/gemini-provider';
|
|
3
|
+
export { GeminiTransport, MalformedFunctionCallError } from './transports/gemini-transport';
|
|
2
4
|
export { AI_FEATURE_FLAG, isAIFeatureEnabled } from './utils/feature-flags';
|
|
3
5
|
export { isSpeechRecognitionAvailable, startSpeechRecognition } from './utils/speech-to-text';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { __asyncDelegator, __asyncGenerator, __asyncValues, __await, __awaiter } from "tslib";
|
|
2
|
+
import { buildCriteriaSystemPrompt, buildCriteriaUserPrompt, CRITERIA_JSON_SCHEMA, parseCriteriaResponse, } from '../interactions';
|
|
3
|
+
import { logger } from '../utils';
|
|
4
|
+
/**
|
|
5
|
+
* Gemini AI provider. Uses {@link GeminiTransport} to handle requests.
|
|
6
|
+
* Implements criteria interpretation and multi-turn chat.
|
|
7
|
+
*
|
|
8
|
+
* @beta
|
|
9
|
+
*/
|
|
10
|
+
export class GeminiProvider {
|
|
11
|
+
constructor(config, transport) {
|
|
12
|
+
this.transport = transport;
|
|
13
|
+
this.criteriaInstructions = config.criteriaInstructions;
|
|
14
|
+
}
|
|
15
|
+
getStatus() {
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
const config = this.transport.getConfig();
|
|
18
|
+
return { provider: 'gemini', model: config.model };
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
interpretCriteria(input, context) {
|
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
var _a;
|
|
24
|
+
const fields = (_a = context === null || context === void 0 ? void 0 : context.fields) !== null && _a !== void 0 ? _a : [];
|
|
25
|
+
const systemPrompt = buildCriteriaSystemPrompt(fields, this.criteriaInstructions);
|
|
26
|
+
const userPrompt = buildCriteriaUserPrompt(input);
|
|
27
|
+
try {
|
|
28
|
+
const raw = yield this.transport.sendStructuredPrompt({
|
|
29
|
+
systemPrompt,
|
|
30
|
+
userPrompt,
|
|
31
|
+
responseSchema: CRITERIA_JSON_SCHEMA,
|
|
32
|
+
});
|
|
33
|
+
return parseCriteriaResponse(raw);
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
logger.error('GeminiProvider interpretCriteria failed:', e);
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
chat(history, userMessage, options) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
return this.transport.sendChatMessage(history, userMessage, options);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
streamChat(history, userMessage, options) {
|
|
47
|
+
return __asyncGenerator(this, arguments, function* streamChat_1() {
|
|
48
|
+
if ('streamChatMessage' in this.transport &&
|
|
49
|
+
typeof this.transport.streamChatMessage === 'function') {
|
|
50
|
+
yield __await(yield* __asyncDelegator(__asyncValues(this.transport.streamChatMessage(history, userMessage, options))));
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Fallback: non-streaming chat exposed as a single chunk
|
|
54
|
+
const msg = yield __await(this.transport.sendChatMessage(history, userMessage, options));
|
|
55
|
+
yield yield __await({ delta: msg.content, done: true, toolCalls: msg.toolCalls });
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|