easy_ml 0.2.0.pre.rc50 → 0.2.0.pre.rc52

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9571100b7780c1c76d4305566045b890cde5b7a4a0b4ad8526f26d8a3c6337aa
4
- data.tar.gz: 129ba88803cfa45fc6382599e0e8615977567c461d2de9b70318f43d45a496ba
3
+ metadata.gz: b0b6da194500895ff325b1408757ee328b355da448a5fcc53439d7b14ccea9c8
4
+ data.tar.gz: da221df414245aafd56c5a05367146b9aae131885a99fa19e11aaa0f3cd32a20
5
5
  SHA512:
6
- metadata.gz: bb6d4c3b678e58f813a8cc1822a75812fdeb0d2ad65b8d67ecb600bdf2822e522a3cae04c067ad91d4894e6f60dcf3e72bbe52a4206ac7892dde3ad0da8f9a89
7
- data.tar.gz: 856438e590cec6306d64c64f7314b81c3eee907fc760fa1fd2978a0fff13fa71df5bc483aae3ee24a5ea7403043f6258f16c985e7e1e334c1e2782822786c56d
6
+ metadata.gz: 1d04422529423e09cff72496a29ff41038fdde5adfc0f267065981d04c24c9e9475d9ad0b2ab083e2d5e8cef22581180df97c93e960579cca8657b1771adc977
7
+ data.tar.gz: d9904acd55317dc68d774c26f392399990fdd52f45f394f8fdc6addf11456ea1361e2d972a438647c7dc0f679e3642cd8ae1f13cc9e0824c72865de8ecb0b6a9
@@ -17,6 +17,16 @@ interface PaginatedRuns {
17
17
 
18
18
  const ITEMS_PER_PAGE = 3;
19
19
 
20
+ const METRIC_MAPPINGS: Record<string, string> = {
21
+ root_mean_squared_error: 'rmse',
22
+ mean_absolute_error: 'mae',
23
+ mean_squared_error: 'mse',
24
+ r2_score: 'r2',
25
+ accuracy_score: 'accuracy',
26
+ precision_score: 'precision',
27
+ recall_score: 'recall'
28
+ };
29
+
20
30
  export function ModelDetails({ model, onBack, rootPath }: ModelDetailsProps) {
21
31
  const [activeTab, setActiveTab] = useState<'overview' | 'dataset'>('overview');
22
32
  const [runs, setRuns] = useState<RetrainingRun[]>(model.retraining_runs?.runs || []);
@@ -103,6 +113,10 @@ export function ModelDetails({ model, onBack, rootPath }: ModelDetailsProps) {
103
113
  return run.status === 'deployed';
104
114
  };
105
115
 
116
+ const formatMetricKey = (key: string) => {
117
+ return METRIC_MAPPINGS[key] || key;
118
+ };
119
+
106
120
  return (
107
121
  <div className="space-y-6">
108
122
  <div className="flex items-center justify-between">
@@ -271,7 +285,7 @@ export function ModelDetails({ model, onBack, rootPath }: ModelDetailsProps) {
271
285
  ).map(([key, value]) => (
272
286
  <div key={key} className="bg-gray-50 rounded-md p-3">
273
287
  <div className="text-sm font-medium text-gray-500">
274
- {key}
288
+ {formatMetricKey(key)}
275
289
  </div>
276
290
  <div className="mt-1 flex items-center gap-2">
277
291
  <span className="text-lg font-semibold">
@@ -54,7 +54,7 @@ export function ColumnFilters({
54
54
  };
55
55
 
56
56
  const columnsWithNulls = columns
57
- .filter(col => col.statistics?.processed.null_count && col.statistics.processed.null_count > 0)
57
+ .filter(col => col.statistics?.processed?.null_count && col.statistics?.processed?.null_count > 0)
58
58
  .sort((a, b) => calculateNullPercentage(b) - calculateNullPercentage(a));
59
59
 
60
60
  const [currentPage, setCurrentPage] = useState(1);
@@ -5,18 +5,18 @@ module EasyML
5
5
  @queue = :easy_ml
6
6
 
7
7
  def self.perform(batch_id, options = {})
8
- options.symbolize_keys!
9
- feature_id = options.dig(:feature_id)
10
- feature = EasyML::Feature.find(feature_id)
11
- dataset = feature.dataset
12
-
13
- # Check if any feature has failed before proceeding
14
- if dataset.features.any? { |f| f.workflow_status == "failed" }
15
- puts "Aborting feature computation due to previous feature failure"
16
- return
17
- end
18
-
19
8
  begin
9
+ options.symbolize_keys!
10
+ feature_id = options.dig(:feature_id)
11
+ feature = EasyML::Feature.find(feature_id)
12
+ dataset = feature.dataset
13
+
14
+ # Check if any feature has failed before proceeding
15
+ if dataset.features.any? { |f| f.workflow_status == "failed" }
16
+ puts "Aborting feature computation due to previous feature failure"
17
+ return
18
+ end
19
+
20
20
  feature.update(workflow_status: :analyzing) if feature.workflow_status == :ready
21
21
  feature.fit_batch(options.merge!(batch_id: batch_id))
22
22
  rescue => e
@@ -1,16 +1,16 @@
1
1
  module EasyML
2
2
  class RefreshDatasetJob < ApplicationJob
3
3
  def perform(id)
4
- dataset = EasyML::Dataset.find(id)
5
- puts "Refreshing dataset #{dataset.name}"
6
- puts "Needs refresh? #{dataset.needs_refresh?}"
7
- unless dataset.needs_refresh?
8
- dataset.update(workflow_status: :ready)
9
- end
4
+ begin
5
+ dataset = EasyML::Dataset.find(id)
6
+ puts "Refreshing dataset #{dataset.name}"
7
+ puts "Needs refresh? #{dataset.needs_refresh?}"
8
+ unless dataset.needs_refresh?
9
+ dataset.update(workflow_status: :ready)
10
+ end
10
11
 
11
- create_event(dataset, "started")
12
+ create_event(dataset, "started")
12
13
 
13
- begin
14
14
  puts "Prepare! #{dataset.name}"
15
15
  dataset.prepare
16
16
  if dataset.features.needs_fit.any?
@@ -25,6 +25,7 @@ module EasyML
25
25
  if Rails.env.test?
26
26
  raise e
27
27
  end
28
+ dataset.update(workflow_status: :failed)
28
29
  handle_error(dataset, e)
29
30
  end
30
31
  end
@@ -98,10 +98,6 @@ module EasyML
98
98
 
99
99
  private
100
100
 
101
- def set_date_column_if_date_splitter
102
- binding.pry
103
- end
104
-
105
101
  def handle_date_column_change
106
102
  return unless saved_change_to_is_date_column? && is_date_column?
107
103
 
@@ -156,7 +156,7 @@ module EasyML
156
156
  raise "Couldn't find primary key for feature #{feature_class}, check your feature class"
157
157
  end
158
158
 
159
- dataset.raw.data(limit: 1, select: primary_key)[primary_key].to_a.flat_map { |h| h.respond_to?(:values) ? h.values : h }.all? do |value|
159
+ dataset.raw.data(limit: 1, select: primary_key, all_columns: true)[primary_key].to_a.flat_map { |h| h.respond_to?(:values) ? h.values : h }.all? do |value|
160
160
  case value
161
161
  when String then value.match?(/\A[-+]?\d+(\.\d+)?\z/)
162
162
  else
@@ -69,8 +69,8 @@ module EasyML
69
69
  if !object.failed? || object.events.empty?
70
70
  nil
71
71
  else
72
- last_event = object.events.order(id: :desc).limit(1).last
73
- last_event&.stacktrace if last_event&.status == "failed"
72
+ last_event = object.events.where(status: :failed).order(id: :desc).limit(1).last
73
+ last_event&.stacktrace
74
74
  end
75
75
  end
76
76
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EasyML
4
- VERSION = "0.2.0-rc50"
4
+ VERSION = "0.2.0-rc52"
5
5
 
6
6
  module Version
7
7
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "entrypoints/Application.tsx": {
3
- "file": "assets/entrypoints/Application.tsx-u6L4jkNy.js",
3
+ "file": "assets/entrypoints/Application.tsx-BWHK2hEi.js",
4
4
  "name": "entrypoints/Application.tsx",
5
5
  "src": "entrypoints/Application.tsx",
6
6
  "isEntry": true,