multiwoven-integrations 0.41.11 → 0.42.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.
- checksums.yaml +4 -4
- data/lib/multiwoven/integrations/rollout.rb +2 -1
- data/lib/multiwoven/integrations/source/mistral_ai/client.rb +19 -0
- data/lib/multiwoven/integrations/source/mistral_ai/config/catalog.json +6 -0
- data/lib/multiwoven/integrations/source/mistral_ai/config/meta.json +22 -0
- data/lib/multiwoven/integrations/source/mistral_ai/config/models.json +168 -0
- data/lib/multiwoven/integrations/source/mistral_ai/config/spec.json +71 -0
- data/lib/multiwoven/integrations/source/mistral_ai/icon.svg +1 -0
- data/lib/multiwoven/integrations/source/one_drive/client.rb +28 -0
- data/lib/multiwoven/integrations.rb +1 -0
- metadata +8 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2aafe56dba0839f408ce9b67bd4a5a3e0e7b06081cea437da55299fb83236aa5
|
|
4
|
+
data.tar.gz: 73de5d0ebc7c416a889f40c6e1131fb3b8d4fb15b8414b0ecfea0d068745dc52
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9fe49be29f5706af6f8cc6df96394082143c419c56d82cde9222969fd1b45b949d00e1023317fa54e8b3171c649967b0ca8aa70aff8515745ef6cd15d0f8e323
|
|
7
|
+
data.tar.gz: 80a9c368b79c7251c88692c30f17325690ebc6e96384ae4010ad8a8f878a091f523e50fe1d5a4a7ffaf6ca32922d20711609905b53fb70791ebda2fb5e2db2cc
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Multiwoven::Integrations::Source
|
|
4
|
+
module MistralAi
|
|
5
|
+
include Multiwoven::Integrations::Core
|
|
6
|
+
# Mistral exposes an OpenAI-compatible chat completions API, so read/stream
|
|
7
|
+
# handling matches GenericOpenAI.
|
|
8
|
+
#
|
|
9
|
+
# Model Hub stays curated in config/models.json: OpenRouter's mistralai/* ids
|
|
10
|
+
# (e.g. mistral-large) do not match Mistral API aliases (mistral-large-latest).
|
|
11
|
+
class Client < GenericOpenAI::Client
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def log_context
|
|
15
|
+
"MISTRAL_AI"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": {
|
|
3
|
+
"name": "MistralAi",
|
|
4
|
+
"title": "Mistral AI",
|
|
5
|
+
"connector_type": "source",
|
|
6
|
+
"category": "AI Model",
|
|
7
|
+
"sub_category": "LLM",
|
|
8
|
+
"provider_type": "third_party",
|
|
9
|
+
"display_order": 170,
|
|
10
|
+
"description": "Mistral AI models via the OpenAI-compatible chat completions API. Catalog is curated to Mistral API model aliases.",
|
|
11
|
+
"documentation_url": "https://docs.mistral.ai/",
|
|
12
|
+
"github_issue_label": "source-mistral-ai",
|
|
13
|
+
"icon": "https://res.cloudinary.com/dspflukeu/image/upload/v1790199623/Multiwoven/connectors/mistral_ai/icon.svg",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"release_stage": "alpha",
|
|
16
|
+
"support_level": "community",
|
|
17
|
+
"tags": [
|
|
18
|
+
"language:ruby",
|
|
19
|
+
"multiwoven"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
{
|
|
2
|
+
"//models": "Curated for Mistral AI API aliases (https://docs.mistral.ai/getting-started/models). OpenRouter mistralai/* ids do not match (e.g. mistral-large vs mistral-large-latest). Do not set openrouter_slug.",
|
|
3
|
+
"models": [
|
|
4
|
+
{
|
|
5
|
+
"id": "mistral-large-latest",
|
|
6
|
+
"name": "Mistral Large 3",
|
|
7
|
+
"model_type": "llm",
|
|
8
|
+
"type": "completion",
|
|
9
|
+
"tasks": [
|
|
10
|
+
"Text Generation",
|
|
11
|
+
"Reasoning"
|
|
12
|
+
],
|
|
13
|
+
"context_window": 262144,
|
|
14
|
+
"max_output": 262144,
|
|
15
|
+
"pricing": {
|
|
16
|
+
"input": 0.5,
|
|
17
|
+
"output": 1.5,
|
|
18
|
+
"cached_read": 0.05,
|
|
19
|
+
"unit": "per_1m_tokens"
|
|
20
|
+
},
|
|
21
|
+
"capabilities": [
|
|
22
|
+
"Tool Use",
|
|
23
|
+
"JSON Object Mode",
|
|
24
|
+
"JSON Schema Mode",
|
|
25
|
+
"Image analysis"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "mistral-medium-latest",
|
|
30
|
+
"name": "Mistral Medium 3.5",
|
|
31
|
+
"model_type": "llm",
|
|
32
|
+
"type": "completion",
|
|
33
|
+
"tasks": [
|
|
34
|
+
"Text Generation",
|
|
35
|
+
"Reasoning"
|
|
36
|
+
],
|
|
37
|
+
"context_window": 262144,
|
|
38
|
+
"max_output": 262144,
|
|
39
|
+
"pricing": {
|
|
40
|
+
"input": 1.5,
|
|
41
|
+
"output": 7.5,
|
|
42
|
+
"cached_read": 0.15,
|
|
43
|
+
"unit": "per_1m_tokens"
|
|
44
|
+
},
|
|
45
|
+
"capabilities": [
|
|
46
|
+
"Tool Use",
|
|
47
|
+
"JSON Object Mode",
|
|
48
|
+
"JSON Schema Mode",
|
|
49
|
+
"Image analysis"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "mistral-small-latest",
|
|
54
|
+
"name": "Mistral Small 4",
|
|
55
|
+
"model_type": "llm",
|
|
56
|
+
"type": "completion",
|
|
57
|
+
"tasks": [
|
|
58
|
+
"Text Generation",
|
|
59
|
+
"Reasoning"
|
|
60
|
+
],
|
|
61
|
+
"context_window": 262144,
|
|
62
|
+
"max_output": 262144,
|
|
63
|
+
"pricing": {
|
|
64
|
+
"input": 0.15,
|
|
65
|
+
"output": 0.6,
|
|
66
|
+
"cached_read": 0.015,
|
|
67
|
+
"unit": "per_1m_tokens"
|
|
68
|
+
},
|
|
69
|
+
"capabilities": [
|
|
70
|
+
"Tool Use",
|
|
71
|
+
"JSON Object Mode",
|
|
72
|
+
"JSON Schema Mode",
|
|
73
|
+
"Image analysis"
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "ministral-14b-latest",
|
|
78
|
+
"name": "Ministral 3 14B",
|
|
79
|
+
"model_type": "llm",
|
|
80
|
+
"type": "completion",
|
|
81
|
+
"tasks": [
|
|
82
|
+
"Text Generation"
|
|
83
|
+
],
|
|
84
|
+
"context_window": 262144,
|
|
85
|
+
"max_output": 262144,
|
|
86
|
+
"pricing": {
|
|
87
|
+
"input": 0.2,
|
|
88
|
+
"output": 0.2,
|
|
89
|
+
"cached_read": 0.02,
|
|
90
|
+
"unit": "per_1m_tokens"
|
|
91
|
+
},
|
|
92
|
+
"capabilities": [
|
|
93
|
+
"Tool Use",
|
|
94
|
+
"JSON Object Mode",
|
|
95
|
+
"JSON Schema Mode",
|
|
96
|
+
"Image analysis"
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "ministral-8b-latest",
|
|
101
|
+
"name": "Ministral 3 8B",
|
|
102
|
+
"model_type": "llm",
|
|
103
|
+
"type": "completion",
|
|
104
|
+
"tasks": [
|
|
105
|
+
"Text Generation"
|
|
106
|
+
],
|
|
107
|
+
"context_window": 262144,
|
|
108
|
+
"max_output": 262144,
|
|
109
|
+
"pricing": {
|
|
110
|
+
"input": 0.15,
|
|
111
|
+
"output": 0.15,
|
|
112
|
+
"cached_read": 0.015,
|
|
113
|
+
"unit": "per_1m_tokens"
|
|
114
|
+
},
|
|
115
|
+
"capabilities": [
|
|
116
|
+
"Tool Use",
|
|
117
|
+
"JSON Object Mode",
|
|
118
|
+
"JSON Schema Mode",
|
|
119
|
+
"Image analysis"
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "ministral-3b-latest",
|
|
124
|
+
"name": "Ministral 3 3B",
|
|
125
|
+
"model_type": "llm",
|
|
126
|
+
"type": "completion",
|
|
127
|
+
"tasks": [
|
|
128
|
+
"Text Generation"
|
|
129
|
+
],
|
|
130
|
+
"context_window": 262144,
|
|
131
|
+
"max_output": 262144,
|
|
132
|
+
"pricing": {
|
|
133
|
+
"input": 0.1,
|
|
134
|
+
"output": 0.1,
|
|
135
|
+
"cached_read": 0.01,
|
|
136
|
+
"unit": "per_1m_tokens"
|
|
137
|
+
},
|
|
138
|
+
"capabilities": [
|
|
139
|
+
"Tool Use",
|
|
140
|
+
"JSON Object Mode",
|
|
141
|
+
"JSON Schema Mode",
|
|
142
|
+
"Image analysis"
|
|
143
|
+
]
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"id": "codestral-latest",
|
|
147
|
+
"name": "Codestral",
|
|
148
|
+
"model_type": "llm",
|
|
149
|
+
"type": "completion",
|
|
150
|
+
"tasks": [
|
|
151
|
+
"Code Generation"
|
|
152
|
+
],
|
|
153
|
+
"context_window": 131072,
|
|
154
|
+
"max_output": 131072,
|
|
155
|
+
"pricing": {
|
|
156
|
+
"input": 0.3,
|
|
157
|
+
"output": 0.9,
|
|
158
|
+
"cached_read": 0.03,
|
|
159
|
+
"unit": "per_1m_tokens"
|
|
160
|
+
},
|
|
161
|
+
"capabilities": [
|
|
162
|
+
"Tool Use",
|
|
163
|
+
"JSON Object Mode",
|
|
164
|
+
"JSON Schema Mode"
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"documentation_url": "https://docs.mistral.ai/api/endpoint/chat",
|
|
3
|
+
"stream_type": "user_defined",
|
|
4
|
+
"connector_query_type": "ai_ml",
|
|
5
|
+
"connection_specification": {
|
|
6
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
7
|
+
"title": "MistralAi",
|
|
8
|
+
"type": "object",
|
|
9
|
+
"x-dynamic-input-path": "messages.0.content",
|
|
10
|
+
"x-output-path": "choices.0.message.content",
|
|
11
|
+
"required": [
|
|
12
|
+
"url",
|
|
13
|
+
"api_key",
|
|
14
|
+
"request_format",
|
|
15
|
+
"response_format"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"url": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"title": "Endpoint URL",
|
|
21
|
+
"description": "The Mistral OpenAI-compatible chat completions endpoint. For data residency, you can use the regional endpoints https://api.eu.mistral.ai/v1/chat/completions (EU) or https://api.us.mistral.ai/v1/chat/completions (US).",
|
|
22
|
+
"default": "https://api.mistral.ai/v1/chat/completions",
|
|
23
|
+
"order": 0
|
|
24
|
+
},
|
|
25
|
+
"api_key": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"multiwoven_secret": true,
|
|
28
|
+
"title": "API Key",
|
|
29
|
+
"description": "Your Mistral API key.",
|
|
30
|
+
"order": 1
|
|
31
|
+
},
|
|
32
|
+
"is_stream": {
|
|
33
|
+
"type": "boolean",
|
|
34
|
+
"title": "Enable streaming",
|
|
35
|
+
"description": "Enables data streaming when supported by the model. When true, responses are processed in chunks for immediate delivery. Default is false.",
|
|
36
|
+
"default": false,
|
|
37
|
+
"order": 2
|
|
38
|
+
},
|
|
39
|
+
"config": {
|
|
40
|
+
"title": "",
|
|
41
|
+
"type": "object",
|
|
42
|
+
"properties": {
|
|
43
|
+
"timeout": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"default": "30",
|
|
46
|
+
"title": "HTTP Timeout",
|
|
47
|
+
"description": "The maximum time, in seconds, to wait for a response from the server before the request is canceled.",
|
|
48
|
+
"order": 0
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"order": 3
|
|
52
|
+
},
|
|
53
|
+
"request_format": {
|
|
54
|
+
"title": "Request Format",
|
|
55
|
+
"description": "Sample Request Format",
|
|
56
|
+
"type": "string",
|
|
57
|
+
"default": "{\"model\":\"mistral-small-latest\", \"messages\":[{\"role\": \"user\", \"content\": \"Hi.\"}], \"stream\": false}",
|
|
58
|
+
"x-request-format": true,
|
|
59
|
+
"order": 4
|
|
60
|
+
},
|
|
61
|
+
"response_format": {
|
|
62
|
+
"title": "Response Format",
|
|
63
|
+
"description": "Sample Response Format",
|
|
64
|
+
"type": "string",
|
|
65
|
+
"default": "{\"choices\":[{\"index\": 0, \"message\":{\"role\": \"assistant\", \"content\": \"Hello!\"}, \"finish_reason\": \"stop\"}]}",
|
|
66
|
+
"x-response-format": true,
|
|
67
|
+
"order": 5
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Mistral</title><path d="M3.428 3.4h3.429v3.428H3.428V3.4zm13.714 0h3.43v3.428h-3.43V3.4z" fill="gold"></path><path d="M3.428 6.828h6.857v3.429H3.429V6.828zm10.286 0h6.857v3.429h-6.857V6.828z" fill="#FFAF00"></path><path d="M3.428 10.258h17.144v3.428H3.428v-3.428z" fill="#FF8205"></path><path d="M3.428 13.686h3.429v3.428H3.428v-3.428zm6.858 0h3.429v3.428h-3.429v-3.428zm6.856 0h3.43v3.428h-3.43v-3.428z" fill="#FA500F"></path><path d="M0 17.114h10.286v3.429H0v-3.429zm13.714 0H24v3.429H13.714v-3.429z" fill="#E10500"></path></svg>
|
|
@@ -6,6 +6,9 @@ module Multiwoven::Integrations::Source
|
|
|
6
6
|
class Client < UnstructuredSourceConnector
|
|
7
7
|
SPREADSHEET_EXTENSIONS = %w[.csv .xlsx .xls .xlsm].freeze
|
|
8
8
|
EXPIRED_ACCESS_TOKEN_ERROR_CODE = "InvalidAuthenticationToken"
|
|
9
|
+
# Matches list_files / SHOW TABLES with optional LIMIT/OFFSET appended by
|
|
10
|
+
# Connector#execute_query or SourceConnector#batched_query.
|
|
11
|
+
LIST_TABLES_QUERY = /\A\s*(?:list_files|show\s+tables)\s*(?:limit\s+(\d+))?\s*(?:offset\s+(\d+))?\s*;?\s*\z/i.freeze
|
|
9
12
|
|
|
10
13
|
def check_connection(connection_config)
|
|
11
14
|
connection_config = connection_config.with_indifferent_access
|
|
@@ -309,6 +312,10 @@ module Multiwoven::Integrations::Source
|
|
|
309
312
|
|
|
310
313
|
def query(connection, query)
|
|
311
314
|
local_file = nil
|
|
315
|
+
if (match = query.to_s.match(LIST_TABLES_QUERY))
|
|
316
|
+
return list_spreadsheet_tables(limit: match[1]&.to_i, offset: match[2]&.to_i)
|
|
317
|
+
end
|
|
318
|
+
|
|
312
319
|
file_name = extract_file_name_from_query(query)
|
|
313
320
|
local_basename = File.basename(file_name)
|
|
314
321
|
local_file = download_spreadsheet_for_query(file_name)
|
|
@@ -322,6 +329,27 @@ module Multiwoven::Integrations::Source
|
|
|
322
329
|
cleanup_ephemeral_download(local_file)
|
|
323
330
|
end
|
|
324
331
|
|
|
332
|
+
# Catalog-style listing for structured OneDrive: spreadsheet files in the
|
|
333
|
+
# configured folder as rows (use file_path in FROM clauses).
|
|
334
|
+
def list_spreadsheet_tables(limit: nil, offset: nil)
|
|
335
|
+
files = spreadsheet_files(fetch_list_items)
|
|
336
|
+
offset = offset.to_i
|
|
337
|
+
limit = limit.to_i unless limit.nil?
|
|
338
|
+
files = files.drop(offset) if offset.positive?
|
|
339
|
+
files = files.first(limit) unless limit.nil?
|
|
340
|
+
|
|
341
|
+
files.map do |file|
|
|
342
|
+
relative_path = relative_file_path(file)
|
|
343
|
+
RecordMessage.new(
|
|
344
|
+
data: {
|
|
345
|
+
file_name: file["name"],
|
|
346
|
+
file_path: relative_path
|
|
347
|
+
},
|
|
348
|
+
emitted_at: Time.now.to_i
|
|
349
|
+
).to_multiwoven_message
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
325
353
|
# Prefer Graph item IDs (same as discover) so nested / shared-folder files
|
|
326
354
|
# resolve during model preview. Resolve id with one path metadata GET —
|
|
327
355
|
# never a full folder listing / recursive BFS. Fall back to path-based download.
|
|
@@ -101,6 +101,7 @@ require_relative "integrations/source/azure_open_ai/client"
|
|
|
101
101
|
require_relative "integrations/source/xai/client"
|
|
102
102
|
require_relative "integrations/source/groq/client"
|
|
103
103
|
require_relative "integrations/source/open_router/client"
|
|
104
|
+
require_relative "integrations/source/mistral_ai/client"
|
|
104
105
|
require_relative "integrations/source/intuit_quick_books/client"
|
|
105
106
|
require_relative "integrations/source/pinecone_db/client"
|
|
106
107
|
require_relative "integrations/source/qdrant/client"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: multiwoven-integrations
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.42.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Subin T P
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-09-
|
|
11
|
+
date: 2026-09-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -851,6 +851,12 @@ files:
|
|
|
851
851
|
- lib/multiwoven/integrations/source/microsoft_dynamics/config/meta.json
|
|
852
852
|
- lib/multiwoven/integrations/source/microsoft_dynamics/config/spec.json
|
|
853
853
|
- lib/multiwoven/integrations/source/microsoft_dynamics/icon.svg
|
|
854
|
+
- lib/multiwoven/integrations/source/mistral_ai/client.rb
|
|
855
|
+
- lib/multiwoven/integrations/source/mistral_ai/config/catalog.json
|
|
856
|
+
- lib/multiwoven/integrations/source/mistral_ai/config/meta.json
|
|
857
|
+
- lib/multiwoven/integrations/source/mistral_ai/config/models.json
|
|
858
|
+
- lib/multiwoven/integrations/source/mistral_ai/config/spec.json
|
|
859
|
+
- lib/multiwoven/integrations/source/mistral_ai/icon.svg
|
|
854
860
|
- lib/multiwoven/integrations/source/odoo/client.rb
|
|
855
861
|
- lib/multiwoven/integrations/source/odoo/config/meta.json
|
|
856
862
|
- lib/multiwoven/integrations/source/odoo/config/spec.json
|