@anvia/mistral 0.1.0 → 0.1.2
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/index.d.ts +7 -2
- package/dist/index.js +104 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { ModelListingClient, ModelList } from '@anvia/core';
|
|
1
2
|
import { Mistral } from '@mistralai/mistralai';
|
|
2
|
-
import { StreamingCompletionModel, CompletionModelCapabilities, CompletionRequest, CompletionResponse, CompletionStreamEvent, Message, ToolDefinition } from '@anvia/core/completion';
|
|
3
|
+
import { StreamingCompletionModel, CompletionModelCapabilities, CompletionRequest, JsonObject, CompletionResponse, CompletionStreamEvent, Message, ToolDefinition } from '@anvia/core/completion';
|
|
3
4
|
import { EmbeddingModel, Embedding } from '@anvia/core/embeddings';
|
|
4
5
|
|
|
5
6
|
type MistralChatParams = Record<string, unknown>;
|
|
@@ -10,6 +11,9 @@ declare class MistralCompletionModel implements StreamingCompletionModel {
|
|
|
10
11
|
readonly provider = "mistral";
|
|
11
12
|
readonly capabilities: CompletionModelCapabilities;
|
|
12
13
|
constructor(client: Mistral, defaultModel?: string);
|
|
14
|
+
traceRequest(request: CompletionRequest, options?: {
|
|
15
|
+
stream?: boolean | undefined;
|
|
16
|
+
}): JsonObject;
|
|
13
17
|
completion(request: CompletionRequest): Promise<CompletionResponse>;
|
|
14
18
|
streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent>;
|
|
15
19
|
}
|
|
@@ -42,11 +46,12 @@ type MistralClientOptions = {
|
|
|
42
46
|
serverURL?: string | undefined;
|
|
43
47
|
client?: Mistral | undefined;
|
|
44
48
|
};
|
|
45
|
-
declare class MistralClient {
|
|
49
|
+
declare class MistralClient implements ModelListingClient {
|
|
46
50
|
readonly client: Mistral;
|
|
47
51
|
constructor(options?: MistralClientOptions);
|
|
48
52
|
completionModel(model?: string): MistralCompletionModel;
|
|
49
53
|
embeddingModel(model?: string, options?: MistralEmbeddingModelOptions): MistralEmbeddingModel;
|
|
54
|
+
listModels(): Promise<ModelList>;
|
|
50
55
|
}
|
|
51
56
|
|
|
52
57
|
type index_MistralClient = MistralClient;
|
package/dist/index.js
CHANGED
|
@@ -17,6 +17,7 @@ __export(mistral_exports, {
|
|
|
17
17
|
});
|
|
18
18
|
|
|
19
19
|
// src/mistral/client.ts
|
|
20
|
+
import { ModelListingError } from "@anvia/core";
|
|
20
21
|
import { Mistral } from "@mistralai/mistralai";
|
|
21
22
|
|
|
22
23
|
// src/mistral/completion.ts
|
|
@@ -84,6 +85,10 @@ var MistralCompletionModel = class {
|
|
|
84
85
|
outputSchema: true,
|
|
85
86
|
reasoning: false
|
|
86
87
|
};
|
|
88
|
+
traceRequest(request, options = {}) {
|
|
89
|
+
const params = toMistralChatParams(this.defaultModel, request);
|
|
90
|
+
return providerRequestSummary(params, request, options);
|
|
91
|
+
}
|
|
87
92
|
async completion(request) {
|
|
88
93
|
assertCompletionRequestSupported(this, request);
|
|
89
94
|
const params = toMistralChatParams(this.defaultModel, request);
|
|
@@ -133,6 +138,39 @@ function toMistralChatParams(defaultModel, request) {
|
|
|
133
138
|
}
|
|
134
139
|
return params;
|
|
135
140
|
}
|
|
141
|
+
function providerRequestSummary(params, request, options) {
|
|
142
|
+
return compactJsonObject({
|
|
143
|
+
provider: "mistral",
|
|
144
|
+
api: options.stream === true ? "chat.stream" : "chat.complete",
|
|
145
|
+
stream: options.stream === true,
|
|
146
|
+
model: stringFrom(params.model),
|
|
147
|
+
parameterKeys: Object.keys(params).sort(),
|
|
148
|
+
messageCount: Array.isArray(params.messages) ? params.messages.length : void 0,
|
|
149
|
+
toolCount: request.tools.length,
|
|
150
|
+
toolNames: request.tools.map((tool) => tool.name),
|
|
151
|
+
hasOutputSchema: request.outputSchema !== void 0,
|
|
152
|
+
temperature: request.temperature,
|
|
153
|
+
maxTokens: request.maxTokens,
|
|
154
|
+
toolChoice: toolChoiceSummary(request.toolChoice),
|
|
155
|
+
additionalParamKeys: isPlainObject(request.additionalParams) ? Object.keys(request.additionalParams).sort() : void 0
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
function toolChoiceSummary(toolChoice) {
|
|
159
|
+
if (toolChoice === void 0 || typeof toolChoice === "string") {
|
|
160
|
+
return toolChoice;
|
|
161
|
+
}
|
|
162
|
+
return { type: toolChoice.type, name: toolChoice.name };
|
|
163
|
+
}
|
|
164
|
+
function compactJsonObject(values) {
|
|
165
|
+
return Object.fromEntries(
|
|
166
|
+
Object.entries(values).flatMap(([key, value]) => {
|
|
167
|
+
if (value === void 0) {
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
return [[key, toJsonValue(value)]];
|
|
171
|
+
})
|
|
172
|
+
);
|
|
173
|
+
}
|
|
136
174
|
function requestMessages(request) {
|
|
137
175
|
return orderedRequestMessages(request, { includeInstructionsAsSystem: true });
|
|
138
176
|
}
|
|
@@ -436,6 +474,15 @@ var MistralClient = class {
|
|
|
436
474
|
embeddingModel(model = "mistral-embed", options = {}) {
|
|
437
475
|
return new MistralEmbeddingModel(this.client, model, options);
|
|
438
476
|
}
|
|
477
|
+
async listModels() {
|
|
478
|
+
try {
|
|
479
|
+
const response = await this.client.models.list();
|
|
480
|
+
const data = collectModelsFromResponse(response).map(toListedModel).filter(isListedModel);
|
|
481
|
+
return { data };
|
|
482
|
+
} catch (error) {
|
|
483
|
+
throw toModelListingError("Mistral", error);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
439
486
|
};
|
|
440
487
|
function requireApiKey(apiKey) {
|
|
441
488
|
if (apiKey === void 0 || apiKey.length === 0) {
|
|
@@ -443,6 +490,63 @@ function requireApiKey(apiKey) {
|
|
|
443
490
|
}
|
|
444
491
|
return apiKey;
|
|
445
492
|
}
|
|
493
|
+
function collectModelsFromResponse(response) {
|
|
494
|
+
if (Array.isArray(response)) {
|
|
495
|
+
return response;
|
|
496
|
+
}
|
|
497
|
+
if (isObject(response) && Array.isArray(response.data)) {
|
|
498
|
+
return response.data;
|
|
499
|
+
}
|
|
500
|
+
return [];
|
|
501
|
+
}
|
|
502
|
+
function toListedModel(model) {
|
|
503
|
+
if (!isObject(model) || typeof model.id !== "string") {
|
|
504
|
+
return void 0;
|
|
505
|
+
}
|
|
506
|
+
return {
|
|
507
|
+
id: model.id,
|
|
508
|
+
...typeof model.name === "string" ? { name: model.name } : {},
|
|
509
|
+
...typeof model.description === "string" ? { description: model.description } : {},
|
|
510
|
+
...typeof model.type === "string" ? { type: model.type } : {},
|
|
511
|
+
...typeof model.created === "number" ? { createdAt: model.created } : {},
|
|
512
|
+
...typeof model.ownedBy === "string" ? { ownedBy: model.ownedBy } : {},
|
|
513
|
+
...typeof model.owned_by === "string" ? { ownedBy: model.owned_by } : {},
|
|
514
|
+
...typeof model.maxContextLength === "number" ? { contextLength: model.maxContextLength } : {},
|
|
515
|
+
...typeof model.max_context_length === "number" ? { contextLength: model.max_context_length } : {}
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
function isListedModel(model) {
|
|
519
|
+
return model !== void 0;
|
|
520
|
+
}
|
|
521
|
+
function toModelListingError(provider, error) {
|
|
522
|
+
if (error instanceof ModelListingError) {
|
|
523
|
+
return error;
|
|
524
|
+
}
|
|
525
|
+
const statusCode = getStatusCode(error);
|
|
526
|
+
return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {
|
|
527
|
+
provider,
|
|
528
|
+
...statusCode === void 0 ? {} : { statusCode },
|
|
529
|
+
cause: error
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
function getStatusCode(error) {
|
|
533
|
+
if (!isObject(error)) {
|
|
534
|
+
return void 0;
|
|
535
|
+
}
|
|
536
|
+
if (typeof error.status === "number") {
|
|
537
|
+
return error.status;
|
|
538
|
+
}
|
|
539
|
+
if (typeof error.statusCode === "number") {
|
|
540
|
+
return error.statusCode;
|
|
541
|
+
}
|
|
542
|
+
return void 0;
|
|
543
|
+
}
|
|
544
|
+
function getErrorMessage(error) {
|
|
545
|
+
return error instanceof Error ? error.message : String(error);
|
|
546
|
+
}
|
|
547
|
+
function isObject(value) {
|
|
548
|
+
return typeof value === "object" && value !== null;
|
|
549
|
+
}
|
|
446
550
|
export {
|
|
447
551
|
MistralClient,
|
|
448
552
|
MistralCompletionModel,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mistral/index.ts","../src/mistral/client.ts","../src/mistral/completion.ts","../src/request-messages.ts","../src/utils.ts","../src/mistral/embedding.ts"],"sourcesContent":["export { MistralClient, type MistralClientOptions } from \"./client\";\nexport {\n fromMistralChatResponse,\n fromMistralChatStreamChunk,\n MistralCompletionModel,\n mistralMessageHelpers,\n toMistralChatParams,\n} from \"./completion\";\nexport { MistralEmbeddingModel, type MistralEmbeddingModelOptions } from \"./embedding\";\n","import { Mistral } from \"@mistralai/mistralai\";\nimport { MistralCompletionModel } from \"./completion\";\nimport { MistralEmbeddingModel, type MistralEmbeddingModelOptions } from \"./embedding\";\n\nexport type MistralClientOptions = {\n apiKey?: string | undefined;\n serverURL?: string | undefined;\n client?: Mistral | undefined;\n};\n\nexport class MistralClient {\n readonly client: Mistral;\n\n constructor(options: MistralClientOptions = {}) {\n this.client =\n options.client ??\n new Mistral({\n apiKey: requireApiKey(options.apiKey),\n serverURL: options.serverURL,\n });\n }\n\n completionModel(model = \"mistral-large-latest\"): MistralCompletionModel {\n return new MistralCompletionModel(this.client, model);\n }\n\n embeddingModel(\n model = \"mistral-embed\",\n options: MistralEmbeddingModelOptions = {},\n ): MistralEmbeddingModel {\n return new MistralEmbeddingModel(this.client, model, options);\n }\n}\n\nfunction requireApiKey(apiKey: string | undefined): string {\n if (apiKey === undefined || apiKey.length === 0) {\n throw new Error(\"Missing Mistral credentials. Pass apiKey when constructing MistralClient.\");\n }\n\n return apiKey;\n}\n","import {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionRequest,\n type CompletionResponse,\n type CompletionStreamEvent,\n type DocumentContent,\n type JsonValue,\n type Message as MessageType,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolContent,\n type ToolDefinition,\n Usage,\n type UserContent,\n} from \"@anvia/core/completion\";\nimport type { Mistral } from \"@mistralai/mistralai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, parseJsonValue, schemaName, stringFrom } from \"../utils\";\n\ntype MistralChatParams = Record<string, unknown>;\ntype MistralChatMessage = Record<string, unknown>;\n\nexport class MistralCompletionModel implements StreamingCompletionModel {\n readonly provider = \"mistral\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: false,\n documentInput: false,\n outputSchema: true,\n reasoning: false,\n };\n\n constructor(\n private readonly client: Mistral,\n readonly defaultModel = \"mistral-large-latest\",\n ) {}\n\n async completion(request: CompletionRequest): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toMistralChatParams(this.defaultModel, request);\n const response = await this.client.chat.complete(params as never);\n return fromMistralChatResponse(response);\n }\n\n async *streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = toMistralChatParams(this.defaultModel, request);\n const stream = await this.client.chat.stream(params as never);\n for await (const chunk of stream as unknown as AsyncIterable<unknown>) {\n for (const event of fromMistralChatStreamChunk(chunk)) {\n yield event;\n }\n }\n }\n}\n\nexport function toMistralChatParams(\n defaultModel: string,\n request: CompletionRequest,\n): MistralChatParams {\n const params: MistralChatParams = {\n model: request.model ?? defaultModel,\n messages: requestMessages(request).flatMap(messageToMistralMessages),\n };\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.maxTokens !== undefined) {\n params.maxTokens = request.maxTokens;\n }\n\n if (request.tools.length > 0) {\n params.tools = request.tools.map(toolDefinitionToMistral);\n }\n\n if (request.toolChoice !== undefined) {\n params.toolChoice = toolChoiceToMistral(request.toolChoice);\n }\n\n if (request.outputSchema !== undefined) {\n params.responseFormat = {\n type: \"json_schema\",\n jsonSchema: {\n name: schemaName(request.outputSchema),\n strict: true,\n schema: request.outputSchema,\n },\n };\n }\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n return params;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request, { includeInstructionsAsSystem: true });\n}\n\nexport function fromMistralChatResponse(response: unknown): CompletionResponse {\n const raw = response as Record<string, unknown>;\n const choices = Array.isArray(raw.choices) ? raw.choices : [];\n const firstChoice = choices.find(isPlainObject);\n const message = isPlainObject(firstChoice?.message) ? firstChoice.message : {};\n const choice: AssistantContentType[] = [];\n\n const text = stringContent(message.content);\n if (text !== undefined && text.length > 0) {\n choice.push(AssistantContent.text(text));\n }\n\n const toolCalls = toolCallsFrom(message);\n for (const toolCall of toolCalls) {\n const fn = isPlainObject(toolCall.function) ? toolCall.function : {};\n const id = stringFrom(toolCall.id) ?? crypto.randomUUID();\n const name = stringFrom(fn.name) ?? \"\";\n const args = parseToolArguments(fn.arguments);\n choice.push(AssistantContent.toolCall(id, name, args));\n }\n\n const result: CompletionResponse = {\n choice,\n usage: usageFromMistral(raw.usage),\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nexport function fromMistralChatStreamChunk(chunk: unknown): CompletionStreamEvent[] {\n if (!isPlainObject(chunk)) {\n return [];\n }\n\n const events: CompletionStreamEvent[] = [];\n const choices = Array.isArray(chunk.choices) ? chunk.choices : [];\n for (const choice of choices) {\n if (!isPlainObject(choice) || !isPlainObject(choice.delta)) {\n continue;\n }\n\n const delta = choice.delta;\n const content = stringContent(delta.content);\n if (content !== undefined && content.length > 0) {\n events.push({ type: \"text_delta\", delta: content });\n }\n\n for (const toolCall of toolCallsFrom(delta)) {\n if (!isPlainObject(toolCall)) {\n continue;\n }\n const fn = isPlainObject(toolCall.function) ? toolCall.function : {};\n const index = numberFrom(toolCall.index);\n events.push(\n toolCallDelta(`tool_${index}`, {\n callId: stringFrom(toolCall.id),\n name: stringFrom(fn.name),\n argumentsDelta: stringFrom(fn.arguments),\n }),\n );\n }\n }\n\n if (typeof chunk.id === \"string\") {\n events.push({ type: \"message_id\", id: chunk.id });\n }\n\n if (isPlainObject(chunk.usage)) {\n const response: CompletionResponse = {\n choice: [],\n usage: usageFromMistral(chunk.usage),\n rawResponse: chunk,\n };\n if (typeof chunk.id === \"string\") {\n response.messageId = chunk.id;\n }\n events.push({ type: \"final\", response });\n }\n\n return events;\n}\n\nfunction usageFromMistral(usage: unknown): Usage {\n const raw = isPlainObject(usage) ? usage : {};\n const inputTokens = numberFrom(raw.promptTokens) || numberFrom(raw.prompt_tokens);\n const outputTokens = numberFrom(raw.completionTokens) || numberFrom(raw.completion_tokens);\n return {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens: numberFrom(raw.totalTokens) || numberFrom(raw.total_tokens),\n };\n}\n\nfunction messageToMistralMessages(message: MessageType): MistralChatMessage[] {\n if (message.role === \"system\") {\n return [{ role: \"system\", content: message.content }];\n }\n\n if (message.role === \"user\") {\n const contentParts: string[] = [];\n\n for (const content of message.content) {\n contentParts.push(...userContentToMistralText(content));\n }\n\n const text = contentParts.join(\"\\n\");\n if (text.length > 0) {\n return [{ role: \"user\", content: text }];\n }\n\n return [];\n }\n\n if (message.role === \"tool\") {\n return message.content.map(toolContentToMistralMessage);\n }\n\n const text = message.content\n .flatMap((content) => (content.type === \"text\" ? [content.text] : []))\n .join(\"\\n\");\n if (message.content.some((content) => content.type === \"image\")) {\n throw new Error(\"Mistral chat does not support image content in assistant history\");\n }\n\n const toolCalls = message.content\n .filter((content) => content.type === \"tool_call\")\n .map((content) => ({\n id: content.id,\n type: \"function\",\n function: {\n name: content.function.name,\n arguments: JSON.stringify(content.function.arguments ?? {}),\n },\n }));\n\n const chatMessage: MistralChatMessage = {\n role: \"assistant\",\n };\n if (text.length > 0) {\n chatMessage.content = text;\n }\n if (toolCalls.length > 0) {\n chatMessage.toolCalls = toolCalls;\n }\n\n return [chatMessage];\n}\n\nfunction toolContentToMistralMessage(content: ToolContent): MistralChatMessage {\n return {\n role: \"tool\",\n toolCallId: content.callId ?? content.id,\n name: content.id,\n content: content.content\n .map((item) => (item.type === \"text\" ? item.text : item.data))\n .join(\"\\n\"),\n };\n}\n\nfunction userContentToMistralText(content: UserContent): string[] {\n if (content.type === \"text\") {\n return [content.text];\n }\n\n if (content.type === \"image\") {\n throw new Error(\"Mistral image inputs are not supported yet\");\n }\n\n if (content.type === \"document\") {\n return documentToMistralText(content);\n }\n\n return [];\n}\n\nfunction documentToMistralText(document: DocumentContent): string[] {\n if (document.source.type === \"text\") {\n return [document.source.text];\n }\n\n throw new Error(\"Mistral document inputs are not supported yet\");\n}\n\nfunction toolDefinitionToMistral(tool: ToolDefinition): MistralChatMessage {\n return {\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n };\n}\n\nfunction toolChoiceToMistral(toolChoice: ToolChoice): unknown {\n if (toolChoice === \"required\") {\n return \"any\";\n }\n\n if (toolChoice === \"auto\" || toolChoice === \"none\") {\n return toolChoice;\n }\n\n return {\n type: \"function\",\n function: {\n name: toolChoice.name,\n },\n };\n}\n\nfunction toolCallsFrom(message: Record<string, unknown>): Record<string, unknown>[] {\n const raw = message.toolCalls ?? message.tool_calls;\n return Array.isArray(raw) ? raw.filter(isPlainObject) : [];\n}\n\nfunction stringContent(content: unknown): string | undefined {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n const text = content\n .flatMap((part) => {\n if (!isPlainObject(part)) {\n return [];\n }\n return typeof part.text === \"string\" ? [part.text] : [];\n })\n .join(\"\");\n return text.length > 0 ? text : undefined;\n }\n\n return undefined;\n}\n\nfunction parseToolArguments(args: unknown): JsonValue {\n if (typeof args === \"string\") {\n return parseJsonValue(args);\n }\n return toJsonValue(args);\n}\n\nfunction toJsonValue(value: unknown): JsonValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(toJsonValue);\n }\n if (isPlainObject(value)) {\n return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, toJsonValue(item)]));\n }\n return null;\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n },\n): CompletionStreamEvent {\n const event: CompletionStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n return event;\n}\n\nexport const mistralMessageHelpers = {\n messageToMistralMessages,\n toolDefinitionToMistral,\n};\n","import {\n type CompletionRequest,\n Message,\n type Message as MessageType,\n normalizeDocuments,\n} from \"@anvia/core/completion\";\n\nexport type OrderedRequestMessagesOptions = {\n includeInstructionsAsSystem?: boolean;\n};\n\nexport function orderedRequestMessages(\n request: CompletionRequest,\n options: OrderedRequestMessagesOptions = {},\n): MessageType[] {\n const messages: MessageType[] = [];\n if (options.includeInstructionsAsSystem === true && request.instructions !== undefined) {\n messages.push(Message.system(request.instructions));\n }\n messages.push(...request.chatHistory.filter((message) => message.role === \"system\"));\n const documents = normalizeDocuments(request.documents);\n if (documents !== undefined) {\n messages.push(documents);\n }\n messages.push(...request.chatHistory.filter((message) => message.role !== \"system\"));\n return messages;\n}\n","import type { JsonObject, JsonValue } from \"@anvia/core/completion\";\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function numberFrom(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\nexport function stringFrom(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function parseJsonValue(text: string): JsonValue {\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n return text;\n }\n}\n\nexport function schemaName(schema: JsonObject): string {\n return typeof schema.title === \"string\" ? schema.title : \"response_schema\";\n}\n","import type { Embedding, EmbeddingModel } from \"@anvia/core/embeddings\";\nimport type { Mistral } from \"@mistralai/mistralai\";\n\nexport type MistralEmbeddingModelOptions = {\n dimensions?: number | undefined;\n maxBatchSize?: number | undefined;\n};\n\nexport class MistralEmbeddingModel implements EmbeddingModel {\n readonly dimensions: number | undefined;\n readonly maxBatchSize: number;\n\n constructor(\n private readonly client: Mistral,\n private readonly model: string,\n options: MistralEmbeddingModelOptions = {},\n ) {\n this.dimensions = options.dimensions;\n this.maxBatchSize = options.maxBatchSize ?? 1024;\n }\n\n async embedTexts(texts: string[]): Promise<Embedding[]> {\n const embeddings: Embedding[] = [];\n for (let index = 0; index < texts.length; index += this.maxBatchSize) {\n const batch = texts.slice(index, index + this.maxBatchSize);\n embeddings.push(...(await this.embedBatch(batch)));\n }\n return embeddings;\n }\n\n private async embedBatch(texts: string[]): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const params: Record<string, unknown> = {\n model: this.model,\n inputs: texts,\n };\n if (this.dimensions !== undefined) {\n params.dimensions = this.dimensions;\n }\n\n const response = await this.client.embeddings.create(params as never);\n const data = dataFromResponse(response);\n if (data.length !== texts.length) {\n throw new Error(\n `Embedding response length ${data.length} did not match input length ${texts.length}`,\n );\n }\n\n return data\n .slice()\n .sort((left, right) => left.index - right.index)\n .map((item, index) => ({\n document: texts[index] as string,\n vector: item.embedding,\n }));\n }\n}\n\ntype EmbeddingData = {\n embedding: number[];\n index: number;\n};\n\nfunction dataFromResponse(response: unknown): EmbeddingData[] {\n const raw = response as Record<string, unknown>;\n return Array.isArray(raw.data)\n ? raw.data.flatMap((item): EmbeddingData[] => {\n const data = item as Record<string, unknown>;\n if (!Array.isArray(data.embedding)) {\n return [];\n }\n return [\n {\n embedding: data.embedding.filter((value): value is number => typeof value === \"number\"),\n index: typeof data.index === \"number\" ? data.index : 0,\n },\n ];\n })\n : [];\n}\n"],"mappings":"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","names":["text"]}
|
|
1
|
+
{"version":3,"sources":["../src/mistral/index.ts","../src/mistral/client.ts","../src/mistral/completion.ts","../src/request-messages.ts","../src/utils.ts","../src/mistral/embedding.ts"],"sourcesContent":["export { MistralClient, type MistralClientOptions } from \"./client\";\nexport {\n fromMistralChatResponse,\n fromMistralChatStreamChunk,\n MistralCompletionModel,\n mistralMessageHelpers,\n toMistralChatParams,\n} from \"./completion\";\nexport { MistralEmbeddingModel, type MistralEmbeddingModelOptions } from \"./embedding\";\n","import { type ModelList, type ModelListingClient, ModelListingError } from \"@anvia/core\";\nimport { Mistral } from \"@mistralai/mistralai\";\nimport { MistralCompletionModel } from \"./completion\";\nimport { MistralEmbeddingModel, type MistralEmbeddingModelOptions } from \"./embedding\";\n\nexport type MistralClientOptions = {\n apiKey?: string | undefined;\n serverURL?: string | undefined;\n client?: Mistral | undefined;\n};\n\nexport class MistralClient implements ModelListingClient {\n readonly client: Mistral;\n\n constructor(options: MistralClientOptions = {}) {\n this.client =\n options.client ??\n new Mistral({\n apiKey: requireApiKey(options.apiKey),\n serverURL: options.serverURL,\n });\n }\n\n completionModel(model = \"mistral-large-latest\"): MistralCompletionModel {\n return new MistralCompletionModel(this.client, model);\n }\n\n embeddingModel(\n model = \"mistral-embed\",\n options: MistralEmbeddingModelOptions = {},\n ): MistralEmbeddingModel {\n return new MistralEmbeddingModel(this.client, model, options);\n }\n\n async listModels(): Promise<ModelList> {\n try {\n const response = await this.client.models.list();\n const data = collectModelsFromResponse(response).map(toListedModel).filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"Mistral\", error);\n }\n }\n}\n\nfunction requireApiKey(apiKey: string | undefined): string {\n if (apiKey === undefined || apiKey.length === 0) {\n throw new Error(\"Missing Mistral credentials. Pass apiKey when constructing MistralClient.\");\n }\n\n return apiKey;\n}\n\nfunction collectModelsFromResponse(response: unknown): unknown[] {\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model) || typeof model.id !== \"string\") {\n return undefined;\n }\n\n return {\n id: model.id,\n ...(typeof model.name === \"string\" ? { name: model.name } : {}),\n ...(typeof model.description === \"string\" ? { description: model.description } : {}),\n ...(typeof model.type === \"string\" ? { type: model.type } : {}),\n ...(typeof model.created === \"number\" ? { createdAt: model.created } : {}),\n ...(typeof model.ownedBy === \"string\" ? { ownedBy: model.ownedBy } : {}),\n ...(typeof model.owned_by === \"string\" ? { ownedBy: model.owned_by } : {}),\n ...(typeof model.maxContextLength === \"number\"\n ? { contextLength: model.maxContextLength }\n : {}),\n ...(typeof model.max_context_length === \"number\"\n ? { contextLength: model.max_context_length }\n : {}),\n };\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n ...(statusCode === undefined ? {} : { statusCode }),\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n","import {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n assertCompletionRequestSupported,\n type CompletionModelCapabilities,\n type CompletionRequest,\n type CompletionResponse,\n type CompletionStreamEvent,\n type DocumentContent,\n type JsonObject,\n type JsonValue,\n type Message as MessageType,\n type StreamingCompletionModel,\n type ToolChoice,\n type ToolContent,\n type ToolDefinition,\n Usage,\n type UserContent,\n} from \"@anvia/core/completion\";\nimport type { Mistral } from \"@mistralai/mistralai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport { isPlainObject, numberFrom, parseJsonValue, schemaName, stringFrom } from \"../utils\";\n\ntype MistralChatParams = Record<string, unknown>;\ntype MistralChatMessage = Record<string, unknown>;\n\nexport class MistralCompletionModel implements StreamingCompletionModel {\n readonly provider = \"mistral\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: false,\n documentInput: false,\n outputSchema: true,\n reasoning: false,\n };\n\n constructor(\n private readonly client: Mistral,\n readonly defaultModel = \"mistral-large-latest\",\n ) {}\n\n traceRequest(\n request: CompletionRequest,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject {\n const params = toMistralChatParams(this.defaultModel, request);\n return providerRequestSummary(params, request, options);\n }\n\n async completion(request: CompletionRequest): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toMistralChatParams(this.defaultModel, request);\n const response = await this.client.chat.complete(params as never);\n return fromMistralChatResponse(response);\n }\n\n async *streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = toMistralChatParams(this.defaultModel, request);\n const stream = await this.client.chat.stream(params as never);\n for await (const chunk of stream as unknown as AsyncIterable<unknown>) {\n for (const event of fromMistralChatStreamChunk(chunk)) {\n yield event;\n }\n }\n }\n}\n\nexport function toMistralChatParams(\n defaultModel: string,\n request: CompletionRequest,\n): MistralChatParams {\n const params: MistralChatParams = {\n model: request.model ?? defaultModel,\n messages: requestMessages(request).flatMap(messageToMistralMessages),\n };\n\n if (request.temperature !== undefined) {\n params.temperature = request.temperature;\n }\n\n if (request.maxTokens !== undefined) {\n params.maxTokens = request.maxTokens;\n }\n\n if (request.tools.length > 0) {\n params.tools = request.tools.map(toolDefinitionToMistral);\n }\n\n if (request.toolChoice !== undefined) {\n params.toolChoice = toolChoiceToMistral(request.toolChoice);\n }\n\n if (request.outputSchema !== undefined) {\n params.responseFormat = {\n type: \"json_schema\",\n jsonSchema: {\n name: schemaName(request.outputSchema),\n strict: true,\n schema: request.outputSchema,\n },\n };\n }\n\n if (request.additionalParams !== undefined && isPlainObject(request.additionalParams)) {\n Object.assign(params, request.additionalParams);\n }\n\n return params;\n}\n\nfunction providerRequestSummary(\n params: MistralChatParams,\n request: CompletionRequest,\n options: { stream?: boolean | undefined },\n): JsonObject {\n return compactJsonObject({\n provider: \"mistral\",\n api: options.stream === true ? \"chat.stream\" : \"chat.complete\",\n stream: options.stream === true,\n model: stringFrom(params.model),\n parameterKeys: Object.keys(params).sort(),\n messageCount: Array.isArray(params.messages) ? params.messages.length : undefined,\n toolCount: request.tools.length,\n toolNames: request.tools.map((tool) => tool.name),\n hasOutputSchema: request.outputSchema !== undefined,\n temperature: request.temperature,\n maxTokens: request.maxTokens,\n toolChoice: toolChoiceSummary(request.toolChoice),\n additionalParamKeys: isPlainObject(request.additionalParams)\n ? Object.keys(request.additionalParams).sort()\n : undefined,\n });\n}\n\nfunction toolChoiceSummary(toolChoice: ToolChoice | undefined): JsonValue | undefined {\n if (toolChoice === undefined || typeof toolChoice === \"string\") {\n return toolChoice;\n }\n return { type: toolChoice.type, name: toolChoice.name };\n}\n\nfunction compactJsonObject(values: Record<string, unknown>): JsonObject {\n return Object.fromEntries(\n Object.entries(values).flatMap(([key, value]) => {\n if (value === undefined) {\n return [];\n }\n return [[key, toJsonValue(value)]];\n }),\n ) as JsonObject;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request, { includeInstructionsAsSystem: true });\n}\n\nexport function fromMistralChatResponse(response: unknown): CompletionResponse {\n const raw = response as Record<string, unknown>;\n const choices = Array.isArray(raw.choices) ? raw.choices : [];\n const firstChoice = choices.find(isPlainObject);\n const message = isPlainObject(firstChoice?.message) ? firstChoice.message : {};\n const choice: AssistantContentType[] = [];\n\n const text = stringContent(message.content);\n if (text !== undefined && text.length > 0) {\n choice.push(AssistantContent.text(text));\n }\n\n const toolCalls = toolCallsFrom(message);\n for (const toolCall of toolCalls) {\n const fn = isPlainObject(toolCall.function) ? toolCall.function : {};\n const id = stringFrom(toolCall.id) ?? crypto.randomUUID();\n const name = stringFrom(fn.name) ?? \"\";\n const args = parseToolArguments(fn.arguments);\n choice.push(AssistantContent.toolCall(id, name, args));\n }\n\n const result: CompletionResponse = {\n choice,\n usage: usageFromMistral(raw.usage),\n rawResponse: response,\n };\n\n if (typeof raw.id === \"string\") {\n result.messageId = raw.id;\n }\n\n return result;\n}\n\nexport function fromMistralChatStreamChunk(chunk: unknown): CompletionStreamEvent[] {\n if (!isPlainObject(chunk)) {\n return [];\n }\n\n const events: CompletionStreamEvent[] = [];\n const choices = Array.isArray(chunk.choices) ? chunk.choices : [];\n for (const choice of choices) {\n if (!isPlainObject(choice) || !isPlainObject(choice.delta)) {\n continue;\n }\n\n const delta = choice.delta;\n const content = stringContent(delta.content);\n if (content !== undefined && content.length > 0) {\n events.push({ type: \"text_delta\", delta: content });\n }\n\n for (const toolCall of toolCallsFrom(delta)) {\n if (!isPlainObject(toolCall)) {\n continue;\n }\n const fn = isPlainObject(toolCall.function) ? toolCall.function : {};\n const index = numberFrom(toolCall.index);\n events.push(\n toolCallDelta(`tool_${index}`, {\n callId: stringFrom(toolCall.id),\n name: stringFrom(fn.name),\n argumentsDelta: stringFrom(fn.arguments),\n }),\n );\n }\n }\n\n if (typeof chunk.id === \"string\") {\n events.push({ type: \"message_id\", id: chunk.id });\n }\n\n if (isPlainObject(chunk.usage)) {\n const response: CompletionResponse = {\n choice: [],\n usage: usageFromMistral(chunk.usage),\n rawResponse: chunk,\n };\n if (typeof chunk.id === \"string\") {\n response.messageId = chunk.id;\n }\n events.push({ type: \"final\", response });\n }\n\n return events;\n}\n\nfunction usageFromMistral(usage: unknown): Usage {\n const raw = isPlainObject(usage) ? usage : {};\n const inputTokens = numberFrom(raw.promptTokens) || numberFrom(raw.prompt_tokens);\n const outputTokens = numberFrom(raw.completionTokens) || numberFrom(raw.completion_tokens);\n return {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens: numberFrom(raw.totalTokens) || numberFrom(raw.total_tokens),\n };\n}\n\nfunction messageToMistralMessages(message: MessageType): MistralChatMessage[] {\n if (message.role === \"system\") {\n return [{ role: \"system\", content: message.content }];\n }\n\n if (message.role === \"user\") {\n const contentParts: string[] = [];\n\n for (const content of message.content) {\n contentParts.push(...userContentToMistralText(content));\n }\n\n const text = contentParts.join(\"\\n\");\n if (text.length > 0) {\n return [{ role: \"user\", content: text }];\n }\n\n return [];\n }\n\n if (message.role === \"tool\") {\n return message.content.map(toolContentToMistralMessage);\n }\n\n const text = message.content\n .flatMap((content) => (content.type === \"text\" ? [content.text] : []))\n .join(\"\\n\");\n if (message.content.some((content) => content.type === \"image\")) {\n throw new Error(\"Mistral chat does not support image content in assistant history\");\n }\n\n const toolCalls = message.content\n .filter((content) => content.type === \"tool_call\")\n .map((content) => ({\n id: content.id,\n type: \"function\",\n function: {\n name: content.function.name,\n arguments: JSON.stringify(content.function.arguments ?? {}),\n },\n }));\n\n const chatMessage: MistralChatMessage = {\n role: \"assistant\",\n };\n if (text.length > 0) {\n chatMessage.content = text;\n }\n if (toolCalls.length > 0) {\n chatMessage.toolCalls = toolCalls;\n }\n\n return [chatMessage];\n}\n\nfunction toolContentToMistralMessage(content: ToolContent): MistralChatMessage {\n return {\n role: \"tool\",\n toolCallId: content.callId ?? content.id,\n name: content.id,\n content: content.content\n .map((item) => (item.type === \"text\" ? item.text : item.data))\n .join(\"\\n\"),\n };\n}\n\nfunction userContentToMistralText(content: UserContent): string[] {\n if (content.type === \"text\") {\n return [content.text];\n }\n\n if (content.type === \"image\") {\n throw new Error(\"Mistral image inputs are not supported yet\");\n }\n\n if (content.type === \"document\") {\n return documentToMistralText(content);\n }\n\n return [];\n}\n\nfunction documentToMistralText(document: DocumentContent): string[] {\n if (document.source.type === \"text\") {\n return [document.source.text];\n }\n\n throw new Error(\"Mistral document inputs are not supported yet\");\n}\n\nfunction toolDefinitionToMistral(tool: ToolDefinition): MistralChatMessage {\n return {\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n };\n}\n\nfunction toolChoiceToMistral(toolChoice: ToolChoice): unknown {\n if (toolChoice === \"required\") {\n return \"any\";\n }\n\n if (toolChoice === \"auto\" || toolChoice === \"none\") {\n return toolChoice;\n }\n\n return {\n type: \"function\",\n function: {\n name: toolChoice.name,\n },\n };\n}\n\nfunction toolCallsFrom(message: Record<string, unknown>): Record<string, unknown>[] {\n const raw = message.toolCalls ?? message.tool_calls;\n return Array.isArray(raw) ? raw.filter(isPlainObject) : [];\n}\n\nfunction stringContent(content: unknown): string | undefined {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n const text = content\n .flatMap((part) => {\n if (!isPlainObject(part)) {\n return [];\n }\n return typeof part.text === \"string\" ? [part.text] : [];\n })\n .join(\"\");\n return text.length > 0 ? text : undefined;\n }\n\n return undefined;\n}\n\nfunction parseToolArguments(args: unknown): JsonValue {\n if (typeof args === \"string\") {\n return parseJsonValue(args);\n }\n return toJsonValue(args);\n}\n\nfunction toJsonValue(value: unknown): JsonValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(toJsonValue);\n }\n if (isPlainObject(value)) {\n return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, toJsonValue(item)]));\n }\n return null;\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n },\n): CompletionStreamEvent {\n const event: CompletionStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n return event;\n}\n\nexport const mistralMessageHelpers = {\n messageToMistralMessages,\n toolDefinitionToMistral,\n};\n","import {\n type CompletionRequest,\n Message,\n type Message as MessageType,\n normalizeDocuments,\n} from \"@anvia/core/completion\";\n\nexport type OrderedRequestMessagesOptions = {\n includeInstructionsAsSystem?: boolean;\n};\n\nexport function orderedRequestMessages(\n request: CompletionRequest,\n options: OrderedRequestMessagesOptions = {},\n): MessageType[] {\n const messages: MessageType[] = [];\n if (options.includeInstructionsAsSystem === true && request.instructions !== undefined) {\n messages.push(Message.system(request.instructions));\n }\n messages.push(...request.chatHistory.filter((message) => message.role === \"system\"));\n const documents = normalizeDocuments(request.documents);\n if (documents !== undefined) {\n messages.push(documents);\n }\n messages.push(...request.chatHistory.filter((message) => message.role !== \"system\"));\n return messages;\n}\n","import type { JsonObject, JsonValue } from \"@anvia/core/completion\";\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function numberFrom(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\nexport function stringFrom(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function parseJsonValue(text: string): JsonValue {\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n return text;\n }\n}\n\nexport function schemaName(schema: JsonObject): string {\n return typeof schema.title === \"string\" ? schema.title : \"response_schema\";\n}\n","import type { Embedding, EmbeddingModel } from \"@anvia/core/embeddings\";\nimport type { Mistral } from \"@mistralai/mistralai\";\n\nexport type MistralEmbeddingModelOptions = {\n dimensions?: number | undefined;\n maxBatchSize?: number | undefined;\n};\n\nexport class MistralEmbeddingModel implements EmbeddingModel {\n readonly dimensions: number | undefined;\n readonly maxBatchSize: number;\n\n constructor(\n private readonly client: Mistral,\n private readonly model: string,\n options: MistralEmbeddingModelOptions = {},\n ) {\n this.dimensions = options.dimensions;\n this.maxBatchSize = options.maxBatchSize ?? 1024;\n }\n\n async embedTexts(texts: string[]): Promise<Embedding[]> {\n const embeddings: Embedding[] = [];\n for (let index = 0; index < texts.length; index += this.maxBatchSize) {\n const batch = texts.slice(index, index + this.maxBatchSize);\n embeddings.push(...(await this.embedBatch(batch)));\n }\n return embeddings;\n }\n\n private async embedBatch(texts: string[]): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const params: Record<string, unknown> = {\n model: this.model,\n inputs: texts,\n };\n if (this.dimensions !== undefined) {\n params.dimensions = this.dimensions;\n }\n\n const response = await this.client.embeddings.create(params as never);\n const data = dataFromResponse(response);\n if (data.length !== texts.length) {\n throw new Error(\n `Embedding response length ${data.length} did not match input length ${texts.length}`,\n );\n }\n\n return data\n .slice()\n .sort((left, right) => left.index - right.index)\n .map((item, index) => ({\n document: texts[index] as string,\n vector: item.embedding,\n }));\n }\n}\n\ntype EmbeddingData = {\n embedding: number[];\n index: number;\n};\n\nfunction dataFromResponse(response: unknown): EmbeddingData[] {\n const raw = response as Record<string, unknown>;\n return Array.isArray(raw.data)\n ? raw.data.flatMap((item): EmbeddingData[] => {\n const data = item as Record<string, unknown>;\n if (!Array.isArray(data.embedding)) {\n return [];\n }\n return [\n {\n embedding: data.embedding.filter((value): value is number => typeof value === \"number\"),\n index: typeof data.index === \"number\" ? data.index : 0,\n },\n ];\n })\n : [];\n}\n"],"mappings":"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","names":["text"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvia/mistral",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Mistral provider adapter for Anvia.",
|
|
5
5
|
"author": "anvia",
|
|
6
6
|
"maintainer": "Indra Zulfi",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@mistralai/mistralai": "^2.2.1",
|
|
22
|
-
"@anvia/core": "0.1
|
|
22
|
+
"@anvia/core": "0.2.1"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^24.9.1",
|