@llumiverse/drivers 0.14.0 → 0.16.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/README.md +3 -3
- package/lib/cjs/adobe/firefly.js +119 -0
- package/lib/cjs/adobe/firefly.js.map +1 -0
- package/lib/cjs/bedrock/converse.js +177 -0
- package/lib/cjs/bedrock/converse.js.map +1 -0
- package/lib/cjs/bedrock/index.js +329 -228
- package/lib/cjs/bedrock/index.js.map +1 -1
- package/lib/cjs/bedrock/nova-image-payload.js +207 -0
- package/lib/cjs/bedrock/nova-image-payload.js.map +1 -0
- package/lib/cjs/groq/index.js +34 -9
- package/lib/cjs/groq/index.js.map +1 -1
- package/lib/cjs/huggingface_ie.js +28 -12
- package/lib/cjs/huggingface_ie.js.map +1 -1
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/mistral/index.js +31 -12
- package/lib/cjs/mistral/index.js.map +1 -1
- package/lib/cjs/mistral/types.js.map +1 -1
- package/lib/cjs/openai/index.js +149 -27
- package/lib/cjs/openai/index.js.map +1 -1
- package/lib/cjs/replicate.js +16 -18
- package/lib/cjs/replicate.js.map +1 -1
- package/lib/cjs/test/TestValidationErrorCompletionStream.js.map +1 -1
- package/lib/cjs/test/index.js.map +1 -1
- package/lib/cjs/togetherai/index.js +40 -10
- package/lib/cjs/togetherai/index.js.map +1 -1
- package/lib/cjs/vertexai/embeddings/embeddings-image.js +26 -0
- package/lib/cjs/vertexai/embeddings/embeddings-image.js.map +1 -0
- package/lib/cjs/vertexai/embeddings/embeddings-text.js +1 -1
- package/lib/cjs/vertexai/embeddings/embeddings-text.js.map +1 -1
- package/lib/cjs/vertexai/index.js +92 -25
- package/lib/cjs/vertexai/index.js.map +1 -1
- package/lib/cjs/vertexai/models/claude.js +252 -0
- package/lib/cjs/vertexai/models/claude.js.map +1 -0
- package/lib/cjs/vertexai/models/gemini.js +169 -27
- package/lib/cjs/vertexai/models/gemini.js.map +1 -1
- package/lib/cjs/vertexai/models/imagen.js +317 -0
- package/lib/cjs/vertexai/models/imagen.js.map +1 -0
- package/lib/cjs/vertexai/models.js +12 -107
- package/lib/cjs/vertexai/models.js.map +1 -1
- package/lib/cjs/watsonx/index.js +39 -8
- package/lib/cjs/watsonx/index.js.map +1 -1
- package/lib/cjs/xai/index.js +71 -0
- package/lib/cjs/xai/index.js.map +1 -0
- package/lib/esm/adobe/firefly.js +115 -0
- package/lib/esm/adobe/firefly.js.map +1 -0
- package/lib/esm/bedrock/converse.js +171 -0
- package/lib/esm/bedrock/converse.js.map +1 -0
- package/lib/esm/bedrock/index.js +331 -230
- package/lib/esm/bedrock/index.js.map +1 -1
- package/lib/esm/bedrock/nova-image-payload.js +203 -0
- package/lib/esm/bedrock/nova-image-payload.js.map +1 -0
- package/lib/esm/groq/index.js +34 -9
- package/lib/esm/groq/index.js.map +1 -1
- package/lib/esm/huggingface_ie.js +29 -13
- package/lib/esm/huggingface_ie.js.map +1 -1
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/mistral/index.js +31 -12
- package/lib/esm/mistral/index.js.map +1 -1
- package/lib/esm/mistral/types.js.map +1 -1
- package/lib/esm/openai/index.js +150 -28
- package/lib/esm/openai/index.js.map +1 -1
- package/lib/esm/replicate.js +17 -19
- package/lib/esm/replicate.js.map +1 -1
- package/lib/esm/test/TestValidationErrorCompletionStream.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/togetherai/index.js +40 -10
- package/lib/esm/togetherai/index.js.map +1 -1
- package/lib/esm/vertexai/embeddings/embeddings-image.js +23 -0
- package/lib/esm/vertexai/embeddings/embeddings-image.js.map +1 -0
- package/lib/esm/vertexai/embeddings/embeddings-text.js +1 -1
- package/lib/esm/vertexai/embeddings/embeddings-text.js.map +1 -1
- package/lib/esm/vertexai/index.js +93 -27
- package/lib/esm/vertexai/index.js.map +1 -1
- package/lib/esm/vertexai/models/claude.js +247 -0
- package/lib/esm/vertexai/models/claude.js.map +1 -0
- package/lib/esm/vertexai/models/gemini.js +170 -28
- package/lib/esm/vertexai/models/gemini.js.map +1 -1
- package/lib/esm/vertexai/models/imagen.js +310 -0
- package/lib/esm/vertexai/models/imagen.js.map +1 -0
- package/lib/esm/vertexai/models.js +12 -104
- package/lib/esm/vertexai/models.js.map +1 -1
- package/lib/esm/watsonx/index.js +39 -8
- package/lib/esm/watsonx/index.js.map +1 -1
- package/lib/esm/xai/index.js +64 -0
- package/lib/esm/xai/index.js.map +1 -0
- package/lib/types/adobe/firefly.d.ts +30 -0
- package/lib/types/adobe/firefly.d.ts.map +1 -0
- package/lib/types/bedrock/converse.d.ts +8 -0
- package/lib/types/bedrock/converse.d.ts.map +1 -0
- package/lib/types/bedrock/index.d.ts +26 -11
- package/lib/types/bedrock/index.d.ts.map +1 -1
- package/lib/types/bedrock/nova-image-payload.d.ts +74 -0
- package/lib/types/bedrock/nova-image-payload.d.ts.map +1 -0
- package/lib/types/bedrock/payloads.d.ts +9 -65
- package/lib/types/bedrock/payloads.d.ts.map +1 -1
- package/lib/types/groq/index.d.ts +3 -3
- package/lib/types/groq/index.d.ts.map +1 -1
- package/lib/types/huggingface_ie.d.ts +5 -7
- package/lib/types/huggingface_ie.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/mistral/index.d.ts +4 -4
- package/lib/types/mistral/index.d.ts.map +1 -1
- package/lib/types/mistral/types.d.ts +1 -0
- package/lib/types/mistral/types.d.ts.map +1 -1
- package/lib/types/openai/index.d.ts +5 -4
- package/lib/types/openai/index.d.ts.map +1 -1
- package/lib/types/replicate.d.ts +4 -9
- package/lib/types/replicate.d.ts.map +1 -1
- package/lib/types/test/index.d.ts +2 -2
- package/lib/types/test/index.d.ts.map +1 -1
- package/lib/types/togetherai/index.d.ts +4 -4
- package/lib/types/togetherai/index.d.ts.map +1 -1
- package/lib/types/vertexai/embeddings/embeddings-image.d.ts +11 -0
- package/lib/types/vertexai/embeddings/embeddings-image.d.ts.map +1 -0
- package/lib/types/vertexai/index.d.ts +19 -8
- package/lib/types/vertexai/index.d.ts.map +1 -1
- package/lib/types/vertexai/models/claude.d.ts +20 -0
- package/lib/types/vertexai/models/claude.d.ts.map +1 -0
- package/lib/types/vertexai/models/gemini.d.ts +4 -4
- package/lib/types/vertexai/models/gemini.d.ts.map +1 -1
- package/lib/types/vertexai/models/imagen.d.ts +75 -0
- package/lib/types/vertexai/models/imagen.d.ts.map +1 -0
- package/lib/types/vertexai/models.d.ts +3 -6
- package/lib/types/vertexai/models.d.ts.map +1 -1
- package/lib/types/watsonx/index.d.ts +3 -3
- package/lib/types/watsonx/index.d.ts.map +1 -1
- package/lib/types/xai/index.d.ts +19 -0
- package/lib/types/xai/index.d.ts.map +1 -0
- package/package.json +24 -23
- package/src/adobe/firefly.ts +207 -0
- package/src/bedrock/converse.ts +194 -0
- package/src/bedrock/index.ts +349 -237
- package/src/bedrock/nova-image-payload.ts +309 -0
- package/src/bedrock/payloads.ts +12 -66
- package/src/groq/index.ts +35 -12
- package/src/huggingface_ie.ts +34 -13
- package/src/index.ts +1 -0
- package/src/mistral/index.ts +34 -12
- package/src/mistral/types.ts +2 -1
- package/src/openai/index.ts +167 -33
- package/src/replicate.ts +21 -20
- package/src/test/TestValidationErrorCompletionStream.ts +2 -2
- package/src/test/index.ts +3 -2
- package/src/togetherai/index.ts +44 -12
- package/src/vertexai/embeddings/embeddings-image.ts +50 -0
- package/src/vertexai/embeddings/embeddings-text.ts +1 -1
- package/src/vertexai/index.ts +114 -37
- package/src/vertexai/models/claude.ts +281 -0
- package/src/vertexai/models/gemini.ts +181 -31
- package/src/vertexai/models/imagen.ts +401 -0
- package/src/vertexai/models.ts +16 -120
- package/src/watsonx/index.ts +42 -10
- package/src/xai/index.ts +110 -0
- package/lib/cjs/vertexai/models/codey-chat.js +0 -65
- package/lib/cjs/vertexai/models/codey-chat.js.map +0 -1
- package/lib/cjs/vertexai/models/codey-text.js +0 -35
- package/lib/cjs/vertexai/models/codey-text.js.map +0 -1
- package/lib/cjs/vertexai/models/palm-model-base.js +0 -59
- package/lib/cjs/vertexai/models/palm-model-base.js.map +0 -1
- package/lib/cjs/vertexai/models/palm2-chat.js +0 -65
- package/lib/cjs/vertexai/models/palm2-chat.js.map +0 -1
- package/lib/cjs/vertexai/models/palm2-text.js +0 -35
- package/lib/cjs/vertexai/models/palm2-text.js.map +0 -1
- package/lib/cjs/vertexai/utils/tensor.js +0 -86
- package/lib/cjs/vertexai/utils/tensor.js.map +0 -1
- package/lib/esm/vertexai/models/codey-chat.js +0 -61
- package/lib/esm/vertexai/models/codey-chat.js.map +0 -1
- package/lib/esm/vertexai/models/codey-text.js +0 -31
- package/lib/esm/vertexai/models/codey-text.js.map +0 -1
- package/lib/esm/vertexai/models/palm-model-base.js +0 -55
- package/lib/esm/vertexai/models/palm-model-base.js.map +0 -1
- package/lib/esm/vertexai/models/palm2-chat.js +0 -61
- package/lib/esm/vertexai/models/palm2-chat.js.map +0 -1
- package/lib/esm/vertexai/models/palm2-text.js +0 -31
- package/lib/esm/vertexai/models/palm2-text.js.map +0 -1
- package/lib/esm/vertexai/utils/tensor.js +0 -82
- package/lib/esm/vertexai/utils/tensor.js.map +0 -1
- package/lib/types/vertexai/models/codey-chat.d.ts +0 -51
- package/lib/types/vertexai/models/codey-chat.d.ts.map +0 -1
- package/lib/types/vertexai/models/codey-text.d.ts +0 -39
- package/lib/types/vertexai/models/codey-text.d.ts.map +0 -1
- package/lib/types/vertexai/models/palm-model-base.d.ts +0 -61
- package/lib/types/vertexai/models/palm-model-base.d.ts.map +0 -1
- package/lib/types/vertexai/models/palm2-chat.d.ts +0 -61
- package/lib/types/vertexai/models/palm2-chat.d.ts.map +0 -1
- package/lib/types/vertexai/models/palm2-text.d.ts +0 -39
- package/lib/types/vertexai/models/palm2-text.d.ts.map +0 -1
- package/lib/types/vertexai/utils/tensor.d.ts +0 -6
- package/lib/types/vertexai/utils/tensor.d.ts.map +0 -1
- package/src/vertexai/models/codey-chat.ts +0 -115
- package/src/vertexai/models/codey-text.ts +0 -69
- package/src/vertexai/models/palm-model-base.ts +0 -128
- package/src/vertexai/models/palm2-chat.ts +0 -119
- package/src/vertexai/models/palm2-text.ts +0 -69
- package/src/vertexai/utils/tensor.ts +0 -82
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { AIModel, Completion, ExecutionOptions, PromptOptions, PromptSegment } from "@llumiverse/core";
|
|
2
|
-
import { transformSSEStream } from "@llumiverse/core/async";
|
|
3
|
-
import { VertexAIDriver } from "../index.js";
|
|
4
|
-
import { ModelDefinition } from "../models.js";
|
|
5
|
-
import { generateStreamingPrompt } from "../utils/tensor.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export interface PromptParamatersBase {
|
|
9
|
-
temperature?: number,
|
|
10
|
-
maxOutputTokens?: number,
|
|
11
|
-
topK?: number,
|
|
12
|
-
topP?: number,
|
|
13
|
-
groundingConfig?: string,
|
|
14
|
-
stopSequences?: string[],
|
|
15
|
-
candidateCount?: number,
|
|
16
|
-
logprobs?: number,
|
|
17
|
-
presencePenalty?: number,
|
|
18
|
-
frequencyPenalty?: number,
|
|
19
|
-
logitBias?: Record<string, number>,
|
|
20
|
-
seed?: number,
|
|
21
|
-
echo?: boolean
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface NonStreamingPromptBase<InstanceType = any> {
|
|
25
|
-
instances: InstanceType[];
|
|
26
|
-
parameters: PromptParamatersBase;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface StreamingPromptBase<InputType = any> {
|
|
30
|
-
inputs: { structVal: InputType }[];
|
|
31
|
-
parameters: {
|
|
32
|
-
structVal: {
|
|
33
|
-
temperature?: { floatval: number },
|
|
34
|
-
maxOutputTokens?: { intVal: number },
|
|
35
|
-
//TODO more params
|
|
36
|
-
[key: string]: Record<string, any> | undefined
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface PalmResponseMetadata {
|
|
42
|
-
tokenMetadata: {
|
|
43
|
-
outputTokenCount: {
|
|
44
|
-
totalBillableCharacters: number,
|
|
45
|
-
totalTokens: number
|
|
46
|
-
},
|
|
47
|
-
inputTokenCount: {
|
|
48
|
-
totalBillableCharacters: number,
|
|
49
|
-
totalTokens: number
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
export abstract class AbstractPalmModelDefinition<NonStreamingPromptT extends NonStreamingPromptBase, StreamingPromptT extends StreamingPromptBase> implements ModelDefinition<NonStreamingPromptT | StreamingPromptT> {
|
|
56
|
-
|
|
57
|
-
abstract model: AIModel;
|
|
58
|
-
|
|
59
|
-
abstract versions?: string[];
|
|
60
|
-
|
|
61
|
-
abstract createNonStreamingPrompt(driver: VertexAIDriver, segments: PromptSegment[], options: PromptOptions): NonStreamingPromptT;
|
|
62
|
-
|
|
63
|
-
abstract extractContentFromResponse(response: any): string;
|
|
64
|
-
|
|
65
|
-
abstract extractContentFromResponseChunk(chunk: any): string;
|
|
66
|
-
|
|
67
|
-
async createPrompt(driver: VertexAIDriver, segments: PromptSegment[], options: PromptOptions) {
|
|
68
|
-
return this.createNonStreamingPrompt(driver, segments, options);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
async requestCompletion(driver: VertexAIDriver, prompt: NonStreamingPromptT | StreamingPromptT, options: ExecutionOptions): Promise<Completion<any>> {
|
|
72
|
-
const nonStreamingPrompt = prompt as NonStreamingPromptT;
|
|
73
|
-
Object.assign((nonStreamingPrompt).parameters, {
|
|
74
|
-
temperature: options.temperature,
|
|
75
|
-
maxOutputTokens: options.max_tokens,
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
const response = await driver.fetchClient.post(`/publishers/google/models/${this.model.id}:predict`, {
|
|
79
|
-
payload: nonStreamingPrompt
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
const metadata = response.metadata as PalmResponseMetadata;
|
|
83
|
-
const inputTokens = metadata.tokenMetadata.inputTokenCount.totalTokens;
|
|
84
|
-
const outputTokens = metadata.tokenMetadata.outputTokenCount.totalTokens;
|
|
85
|
-
const result = this.extractContentFromResponse(response);
|
|
86
|
-
return {
|
|
87
|
-
result,
|
|
88
|
-
token_usage: {
|
|
89
|
-
prompt: inputTokens,
|
|
90
|
-
result: outputTokens,
|
|
91
|
-
total: inputTokens && outputTokens ? inputTokens + outputTokens : undefined,
|
|
92
|
-
},
|
|
93
|
-
//finish_reason not available
|
|
94
|
-
original_response: options.include_original_response ? response : undefined,
|
|
95
|
-
} as Completion;
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
async requestCompletionStream(driver: VertexAIDriver, prompt: NonStreamingPromptT | StreamingPromptT, options: ExecutionOptions): Promise<AsyncIterable<string>> {
|
|
100
|
-
const inPrompt = prompt as NonStreamingPromptT;
|
|
101
|
-
Object.assign(inPrompt.parameters, {
|
|
102
|
-
temperature: options.temperature,
|
|
103
|
-
maxOutputTokens: options.max_tokens,
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
const path = `/publishers/google/models/${this.model.id}:serverStreamingPredict?alt=sse`;
|
|
107
|
-
|
|
108
|
-
const newPrompt = generateStreamingPrompt(inPrompt);
|
|
109
|
-
|
|
110
|
-
// we need to modify the existing prompt since it is not the final one
|
|
111
|
-
const outPrompt = prompt as StreamingPromptT;
|
|
112
|
-
delete (outPrompt as any).instances;
|
|
113
|
-
outPrompt.inputs = newPrompt.inputs;
|
|
114
|
-
outPrompt.parameters = newPrompt.parameters;
|
|
115
|
-
|
|
116
|
-
const eventStrean = await driver.fetchClient.post(path, {
|
|
117
|
-
payload: newPrompt,
|
|
118
|
-
reader: 'sse'
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
return transformSSEStream(eventStrean, (data: string) => {
|
|
122
|
-
const json = JSON.parse(data);
|
|
123
|
-
const stringChunk = this.extractContentFromResponseChunk(json);
|
|
124
|
-
return Array.isArray(stringChunk) ? stringChunk.join('') : stringChunk;
|
|
125
|
-
})
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { AIModel, ModelType, PromptOptions, PromptRole, PromptSegment } from "@llumiverse/core";
|
|
2
|
-
import { getJSONSafetyNotice } from "@llumiverse/core/formatters";
|
|
3
|
-
import { VertexAIDriver } from "../index.js";
|
|
4
|
-
import { AbstractPalmModelDefinition, NonStreamingPromptBase, PalmResponseMetadata, StreamingPromptBase } from "./palm-model-base.js";
|
|
5
|
-
|
|
6
|
-
export interface Palm2ChatMessage {
|
|
7
|
-
author: string,
|
|
8
|
-
content: string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export type Palm2ChatPrompt = NonStreamingPromptBase<{
|
|
12
|
-
context?: string;
|
|
13
|
-
examples?: [
|
|
14
|
-
{
|
|
15
|
-
input: { content: string },
|
|
16
|
-
output: { content: string }
|
|
17
|
-
}
|
|
18
|
-
],
|
|
19
|
-
messages: Palm2ChatMessage[];
|
|
20
|
-
}>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export type Palm2ChatStreamingPrompt = StreamingPromptBase<{
|
|
24
|
-
messages: {
|
|
25
|
-
listVal: {
|
|
26
|
-
structVal: {
|
|
27
|
-
author: {
|
|
28
|
-
stringVal: string
|
|
29
|
-
},
|
|
30
|
-
content: {
|
|
31
|
-
stringVal: string
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}[]
|
|
35
|
-
}
|
|
36
|
-
}>
|
|
37
|
-
|
|
38
|
-
interface Palm2ChatResponsePrediction {
|
|
39
|
-
candidates: Palm2ChatMessage[],
|
|
40
|
-
safetyAttributes: {
|
|
41
|
-
scores: number[],
|
|
42
|
-
blocked: boolean,
|
|
43
|
-
categories: string[],
|
|
44
|
-
errors: number[],
|
|
45
|
-
},
|
|
46
|
-
citationMetadata: {
|
|
47
|
-
citations: any[]
|
|
48
|
-
},
|
|
49
|
-
logprobs: any,
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export interface Palm2ChatResponse {
|
|
53
|
-
predictions: Palm2ChatResponsePrediction[],
|
|
54
|
-
metadata: PalmResponseMetadata
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export class Palm2ChatDefinition extends AbstractPalmModelDefinition<Palm2ChatPrompt, Palm2ChatStreamingPrompt> {
|
|
58
|
-
versions: string[] = [];
|
|
59
|
-
model: AIModel = {
|
|
60
|
-
id: "chat-bison",
|
|
61
|
-
name: "PaLM 2 for Chat",
|
|
62
|
-
provider: "vertexai",
|
|
63
|
-
owner: "google",
|
|
64
|
-
type: ModelType.Chat,
|
|
65
|
-
can_stream: true,
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
createNonStreamingPrompt(_driver: VertexAIDriver, segments: PromptSegment[], opts: PromptOptions): Palm2ChatPrompt {
|
|
69
|
-
const system: string[] = [];
|
|
70
|
-
const messages: Palm2ChatMessage[] = [];
|
|
71
|
-
const safety: string[] = [];
|
|
72
|
-
for (const segment of segments) {
|
|
73
|
-
switch (segment.role) {
|
|
74
|
-
case PromptRole.user:
|
|
75
|
-
messages.push({ author: 'user', content: segment.content });
|
|
76
|
-
break;
|
|
77
|
-
case PromptRole.assistant:
|
|
78
|
-
messages.push({ author: 'assistant', content: segment.content });
|
|
79
|
-
break;
|
|
80
|
-
case PromptRole.system:
|
|
81
|
-
system.push(segment.content);
|
|
82
|
-
break;
|
|
83
|
-
case PromptRole.safety:
|
|
84
|
-
safety.push(segment.content);
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (opts.result_schema) {
|
|
90
|
-
safety.push(getJSONSafetyNotice(opts.result_schema));
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
const context = []
|
|
94
|
-
if (system.length > 0) {
|
|
95
|
-
context.push(system.join('\n'));
|
|
96
|
-
}
|
|
97
|
-
if (safety.length > 0) {
|
|
98
|
-
context.push('IMPORTANT: ' + safety.join('\n'));
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return {
|
|
102
|
-
instances: [{
|
|
103
|
-
context: context.length > 0 ? context.join('\n') : undefined,
|
|
104
|
-
messages
|
|
105
|
-
}],
|
|
106
|
-
parameters: {
|
|
107
|
-
// put defauilts here
|
|
108
|
-
}
|
|
109
|
-
} as Palm2ChatPrompt;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
extractContentFromResponse(response: Palm2ChatResponse): string {
|
|
113
|
-
return response.predictions[0].candidates[0].content ?? '';
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
extractContentFromResponseChunk(chunk: any): string {
|
|
117
|
-
return chunk.outputs[0]?.structVal.candidates.listVal[0].structVal.content.stringVal || ''
|
|
118
|
-
}
|
|
119
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { AIModel, ModelType, PromptOptions, PromptSegment } from "@llumiverse/core";
|
|
2
|
-
import { formatTextPrompt } from "@llumiverse/core/formatters";
|
|
3
|
-
import { VertexAIDriver } from "../index.js";
|
|
4
|
-
import { AbstractPalmModelDefinition, NonStreamingPromptBase, PalmResponseMetadata, StreamingPromptBase } from "./palm-model-base.js";
|
|
5
|
-
|
|
6
|
-
export type Palm2TextPrompt = NonStreamingPromptBase<{
|
|
7
|
-
prompt: string
|
|
8
|
-
}>
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export type Palm2TextStreamingPrompt = StreamingPromptBase<{
|
|
12
|
-
prompt: {
|
|
13
|
-
stringVal: string
|
|
14
|
-
}
|
|
15
|
-
}>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
interface Palm2TextResponsePrediction {
|
|
19
|
-
content: string,
|
|
20
|
-
safetyAttributes: {
|
|
21
|
-
scores: number[],
|
|
22
|
-
safetyRatings: {
|
|
23
|
-
severity: string,
|
|
24
|
-
probabilityScore: number,
|
|
25
|
-
severityScore: number,
|
|
26
|
-
category: string
|
|
27
|
-
}[]
|
|
28
|
-
},
|
|
29
|
-
citationMetadata: {
|
|
30
|
-
citations: any[]
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface Palm2TextResponse {
|
|
35
|
-
predictions: Palm2TextResponsePrediction[],
|
|
36
|
-
metadata: PalmResponseMetadata
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export class Palm2TextDefinition extends AbstractPalmModelDefinition<Palm2TextPrompt, Palm2TextStreamingPrompt> {
|
|
40
|
-
versions: string[] = [];
|
|
41
|
-
model: AIModel = {
|
|
42
|
-
id: "text-bison",
|
|
43
|
-
name: "PaLM 2 for Text",
|
|
44
|
-
provider: "vertexai",
|
|
45
|
-
owner: "google",
|
|
46
|
-
type: ModelType.Text,
|
|
47
|
-
can_stream: true,
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
createNonStreamingPrompt(_driver: VertexAIDriver, segments: PromptSegment[], opts: PromptOptions): Palm2TextPrompt {
|
|
51
|
-
return {
|
|
52
|
-
instances: [{
|
|
53
|
-
prompt: formatTextPrompt(segments, opts.result_schema)
|
|
54
|
-
}],
|
|
55
|
-
parameters: {
|
|
56
|
-
// put defauilts here
|
|
57
|
-
}
|
|
58
|
-
} as Palm2TextPrompt;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
extractContentFromResponse(response: Palm2TextResponse): string {
|
|
62
|
-
return response.predictions[0].content ?? '';
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
extractContentFromResponseChunk(chunk: any): string {
|
|
66
|
-
return chunk.outputs[0]?.structVal.content.stringVal || '';
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
function getTensorType(val: any) {
|
|
4
|
-
if (val == null) {
|
|
5
|
-
return null;
|
|
6
|
-
}
|
|
7
|
-
if (Array.isArray(val)) {
|
|
8
|
-
if (val.length > 0) {
|
|
9
|
-
val = val[0]
|
|
10
|
-
} else {
|
|
11
|
-
return 'listVal';
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
const type = typeof val;
|
|
15
|
-
if (type === 'string') {
|
|
16
|
-
return 'stringVal';
|
|
17
|
-
}
|
|
18
|
-
if (type === 'number') {
|
|
19
|
-
if (val % 1 === 0) { // is interger
|
|
20
|
-
return 'intVal';
|
|
21
|
-
} else {
|
|
22
|
-
return 'floatVal';
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
if (type === 'boolean') {
|
|
26
|
-
return 'boolVal';
|
|
27
|
-
}
|
|
28
|
-
if (type === 'object') {
|
|
29
|
-
return 'structVal';
|
|
30
|
-
}
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function formatArrayAsTensor(arr: any[]): any {
|
|
35
|
-
return arr.map(item => {
|
|
36
|
-
const type = typeof item;
|
|
37
|
-
if (type === 'string' || type === 'number' || type === 'boolean') {
|
|
38
|
-
return item; // primitve values
|
|
39
|
-
} else {
|
|
40
|
-
return formatObjectAsTensor(item)
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Do not support nested array or nested object arrays
|
|
47
|
-
* @param obj
|
|
48
|
-
* @returns
|
|
49
|
-
*/
|
|
50
|
-
function formatObjectAsTensor(obj: any, isField = false): any {
|
|
51
|
-
const struct: any = {};
|
|
52
|
-
const keys = Object.keys(obj);
|
|
53
|
-
for (const key of keys) {
|
|
54
|
-
//console.log('###', key);
|
|
55
|
-
const val = obj[key];
|
|
56
|
-
const type = getTensorType(val);
|
|
57
|
-
if (type === 'structVal') {
|
|
58
|
-
if (Array.isArray(val)) {
|
|
59
|
-
struct[key] = { listVal: formatArrayAsTensor(val) };
|
|
60
|
-
} else {
|
|
61
|
-
struct[key] = {
|
|
62
|
-
[type]: formatObjectAsTensor(val, true)
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
} else if (type) {
|
|
66
|
-
struct[key] = {
|
|
67
|
-
[type]: val
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return isField ? struct : {
|
|
72
|
-
structVal: struct
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
export function generateStreamingPrompt(prompt: { instances: any, parameters: any }): any {
|
|
78
|
-
return {
|
|
79
|
-
inputs: prompt.instances.map((inst: any) => formatObjectAsTensor(inst)),
|
|
80
|
-
parameters: formatObjectAsTensor(prompt.parameters)
|
|
81
|
-
}
|
|
82
|
-
}
|