multiwoven-integrations 0.13.1 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ec77e033727b0ee1dcffb68d822fc7881da80914ad9c783dbc429805d269067
4
- data.tar.gz: 02b8d1a3bd999110e7a251281e414e57d4725c0d16e30947a2c299d2a0aae990
3
+ metadata.gz: a7c243e28fa9925a82ee68f84359a027ea71ce3e3b12189e02b54c5938207021
4
+ data.tar.gz: dc802b13ad025f1a7297fa6aa7e938c5599994fe73be92e103212609bdf25272
5
5
  SHA512:
6
- metadata.gz: 13e57b0868dca890856151bccca0950d46d92113dd4deca1ef4c474513954733ac23017aa13c34a2cb98345a51ed3b9eab93c2b56994c1dd05ae5467cfb0cc0f
7
- data.tar.gz: 52e39eb65c1903c2ac9b5c237059b1f81e62d1f704737bcf96f3fbe03a1b148b1248eab662f53197395c2143b2f8328f8e5dcb8e6cc08c13c863bc5c1871b4bf
6
+ metadata.gz: d1dee7afc9b52139bf2c8ac51de71dedd042b343ead87eaa61cc704672ae53ce87972e025fb6d2940df57806824fd613fb5aba1bb65aa19ab28f0a4bdb292432
7
+ data.tar.gz: a67eae7ca3c35d29eb3021e4fb7bd42a83220a700d9edf68b4ba72905c4d184650e0935f9b355fa7d29e5381c9fb2575f4cbd20b4dbab40ec29e5d66de7b0f06
@@ -4,10 +4,15 @@ module Multiwoven
4
4
  module Integrations::Core
5
5
  class HttpClient
6
6
  class << self
7
- def request(url, method, payload: nil, headers: {})
7
+ def request(url, method, payload: nil, headers: {}, config: {})
8
8
  uri = URI(url)
9
9
  http = Net::HTTP.new(uri.host, uri.port)
10
10
  http.use_ssl = (uri.scheme == "https")
11
+
12
+ # Set timeout if provided
13
+ http.open_timeout = config[:timeout] if config[:timeout]
14
+ http.read_timeout = config[:timeout] if config[:timeout]
15
+
11
16
  request = build_request(method, uri, payload, headers)
12
17
  http.request(request)
13
18
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Multiwoven
4
4
  module Integrations
5
- VERSION = "0.13.1"
5
+ VERSION = "0.14.0"
6
6
 
7
7
  ENABLED_SOURCES = %w[
8
8
  Snowflake
@@ -19,6 +19,7 @@ module Multiwoven
19
19
  DatabricksModel
20
20
  AwsSagemakerModel
21
21
  VertexModel
22
+ HttpModel
22
23
  ].freeze
23
24
 
24
25
  ENABLED_DESTINATIONS = %w[
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Multiwoven::Integrations::Source
4
+ module HttpModel
5
+ include Multiwoven::Integrations::Core
6
+ class Client < SourceConnector
7
+ def check_connection(connection_config)
8
+ connection_config = connection_config.with_indifferent_access
9
+ url_host = connection_config[:url_host]
10
+ headers = connection_config[:headers]
11
+ response = Multiwoven::Integrations::Core::HttpClient.request(
12
+ url_host,
13
+ HTTP_GET,
14
+ headers: headers
15
+ )
16
+ if success?(response)
17
+ success_status
18
+ else
19
+ failure_status(nil)
20
+ end
21
+ rescue StandardError => e
22
+ handle_exception(e, {
23
+ context: "HTTP MODEL:CHECK_CONNECTION:EXCEPTION",
24
+ type: "error"
25
+ })
26
+ failure_status(e)
27
+ end
28
+
29
+ def discover(_connection_config = nil)
30
+ catalog_json = read_json(CATALOG_SPEC_PATH)
31
+ catalog = build_catalog(catalog_json)
32
+ catalog.to_multiwoven_message
33
+ rescue StandardError => e
34
+ handle_exception(e, {
35
+ context: "HTTP MODEL:DISCOVER:EXCEPTION",
36
+ type: "error"
37
+ })
38
+ end
39
+
40
+ def read(sync_config)
41
+ connection_config = sync_config.source.connection_specification
42
+ connection_config = connection_config.with_indifferent_access
43
+ # The server checks the ConnectorQueryType.
44
+ # If it's "ai_ml," the server calculates the payload and passes it as a query in the sync config model protocol.
45
+ # This query is then sent to the AI/ML model.
46
+ payload = JSON.parse(sync_config.model.query)
47
+ run_model(connection_config, payload)
48
+ rescue StandardError => e
49
+ handle_exception(e, {
50
+ context: "HTTP MODEL:READ:EXCEPTION",
51
+ type: "error"
52
+ })
53
+ end
54
+
55
+ private
56
+
57
+ def run_model(connection_config, payload)
58
+ connection_config = connection_config.with_indifferent_access
59
+ url_host = connection_config[:url_host]
60
+ headers = connection_config[:headers]
61
+ config = connection_config[:config]
62
+ config[:timeout] ||= 30
63
+ response = send_request(url_host, payload, headers, config)
64
+ process_response(response)
65
+ rescue StandardError => e
66
+ handle_exception(e, context: "HTTP MODEL:RUN_MODEL:EXCEPTION", type: "error")
67
+ end
68
+
69
+ def process_response(response)
70
+ if success?(response)
71
+ data = JSON.parse(response.body)
72
+ [RecordMessage.new(data: data, emitted_at: Time.now.to_i).to_multiwoven_message]
73
+ else
74
+ create_log_message("HTTP MODEL:RUN_MODEL", "error", "request failed")
75
+ end
76
+ end
77
+
78
+ def send_request(url, payload, headers, config)
79
+ Multiwoven::Integrations::Core::HttpClient.request(
80
+ url,
81
+ HTTP_POST,
82
+ payload: payload,
83
+ headers: headers,
84
+ config: config
85
+ )
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,6 @@
1
+ {
2
+ "request_rate_limit": 600,
3
+ "request_rate_limit_unit": "minute",
4
+ "request_rate_concurrency": 10,
5
+ "streams": []
6
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "data": {
3
+ "name": "HttpModel",
4
+ "title": "HTTP Model",
5
+ "connector_type": "source",
6
+ "category": "AI Model",
7
+ "documentation_url": "https://docs.mutliwoven.com",
8
+ "github_issue_label": "source-http-model",
9
+ "icon": "icon.svg",
10
+ "license": "MIT",
11
+ "release_stage": "alpha",
12
+ "support_level": "community",
13
+ "tags": ["language:ruby", "multiwoven"]
14
+ }
15
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "documentation_url": "https://docs.multiwoven.com/integrations/source/http-model",
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": "Http Model",
8
+ "type": "object",
9
+ "required": ["url_host"],
10
+ "properties": {
11
+ "url_host": {
12
+ "type": "string",
13
+ "title": "URL",
14
+ "order": 0
15
+ },
16
+ "headers": {
17
+ "type": "string",
18
+ "title": "Http Headers",
19
+ "order": 1
20
+ },
21
+ "config": {
22
+ "title": "",
23
+ "type": "object",
24
+ "properties": {
25
+ "timeout": {
26
+ "type": "integer",
27
+ "minimum": 0,
28
+ "default": 30,
29
+ "title": "Http Timeout",
30
+ "order": 0
31
+ }
32
+ },
33
+ "order": 2
34
+ }
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+
3
+ <svg width="800px" height="800px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="none">
4
+
5
+
6
+
7
+
8
+
9
+
@@ -70,6 +70,7 @@ require_relative "integrations/source/oracle_db/client"
70
70
  require_relative "integrations/source/databrics_model/client"
71
71
  require_relative "integrations/source/aws_sagemaker_model/client"
72
72
  require_relative "integrations/source/google_vertex_model/client"
73
+ require_relative "integrations/source/http_model/client"
73
74
 
74
75
  # Destination
75
76
  require_relative "integrations/destination/klaviyo/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.13.1
4
+ version: 0.14.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: 2024-11-11 00:00:00.000000000 Z
11
+ date: 2024-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -720,6 +720,11 @@ files:
720
720
  - lib/multiwoven/integrations/source/google_vertex_model/config/meta.json
721
721
  - lib/multiwoven/integrations/source/google_vertex_model/config/spec.json
722
722
  - lib/multiwoven/integrations/source/google_vertex_model/icon.svg
723
+ - lib/multiwoven/integrations/source/http_model/client.rb
724
+ - lib/multiwoven/integrations/source/http_model/config/catalog.json
725
+ - lib/multiwoven/integrations/source/http_model/config/meta.json
726
+ - lib/multiwoven/integrations/source/http_model/config/spec.json
727
+ - lib/multiwoven/integrations/source/http_model/icon.svg
723
728
  - lib/multiwoven/integrations/source/maria_db/client.rb
724
729
  - lib/multiwoven/integrations/source/maria_db/config/meta.json
725
730
  - lib/multiwoven/integrations/source/maria_db/config/spec.json