featcopilot 0.1.0__py3-none-any.whl → 0.3.0__py3-none-any.whl

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.
@@ -0,0 +1,287 @@
1
+ """Model utilities for Copilot client."""
2
+
3
+ import asyncio
4
+ from typing import Optional
5
+
6
+ from featcopilot.utils.logger import get_logger
7
+
8
+ logger = get_logger(__name__)
9
+
10
+ # Cache for models fetched from Copilot
11
+ _cached_models: Optional[list[dict]] = None
12
+
13
+ # Default model
14
+ DEFAULT_MODEL = "gpt-5.2"
15
+
16
+
17
+ async def _fetch_models_from_copilot() -> list[dict]:
18
+ """Fetch available models from Copilot SDK."""
19
+ try:
20
+ from copilot import CopilotClient
21
+
22
+ client = CopilotClient()
23
+ await client.start()
24
+
25
+ # Get available models from Copilot
26
+ models = await client.list_models()
27
+ await client.stop()
28
+
29
+ return models
30
+
31
+ except ImportError:
32
+ logger.warning("copilot-sdk not installed. Cannot fetch models from Copilot.")
33
+ return []
34
+ except Exception as e:
35
+ logger.warning(f"Could not fetch models from Copilot: {e}")
36
+ return []
37
+
38
+
39
+ def _get_event_loop():
40
+ """Get or create an event loop."""
41
+ try:
42
+ loop = asyncio.get_event_loop()
43
+ if loop.is_closed():
44
+ loop = asyncio.new_event_loop()
45
+ asyncio.set_event_loop(loop)
46
+ except RuntimeError:
47
+ loop = asyncio.new_event_loop()
48
+ asyncio.set_event_loop(loop)
49
+ return loop
50
+
51
+
52
+ def fetch_models(force_refresh: bool = False) -> list[dict]:
53
+ """
54
+ Fetch available models from the Copilot client.
55
+
56
+ This function queries the Copilot SDK to get the current list of
57
+ supported models. Results are cached for subsequent calls.
58
+
59
+ Parameters
60
+ ----------
61
+ force_refresh : bool, default=False
62
+ If True, bypass cache and fetch fresh model list
63
+
64
+ Returns
65
+ -------
66
+ list[dict]
67
+ List of model information dictionaries. Each dict contains
68
+ model metadata from the Copilot API.
69
+
70
+ Examples
71
+ --------
72
+ >>> from featcopilot.utils import fetch_models
73
+ >>> models = fetch_models()
74
+ >>> for m in models:
75
+ ... print(m.get('id') or m.get('name'))
76
+ """
77
+ global _cached_models
78
+
79
+ if _cached_models is not None and not force_refresh:
80
+ return _cached_models
81
+
82
+ loop = _get_event_loop()
83
+ models = loop.run_until_complete(_fetch_models_from_copilot())
84
+
85
+ if models:
86
+ _cached_models = models
87
+
88
+ return models
89
+
90
+
91
+ def list_models(
92
+ provider: Optional[str] = None,
93
+ verbose: bool = False,
94
+ force_refresh: bool = False,
95
+ ) -> list[dict]:
96
+ """
97
+ List all supported models from the Copilot client.
98
+
99
+ Retrieves the current list of available models directly from
100
+ the Copilot SDK.
101
+
102
+ Parameters
103
+ ----------
104
+ provider : str, optional
105
+ Filter by provider (e.g., 'OpenAI', 'Anthropic', 'Google')
106
+ verbose : bool, default=False
107
+ If True, print model information to logger
108
+ force_refresh : bool, default=False
109
+ If True, bypass cache and fetch fresh model list
110
+
111
+ Returns
112
+ -------
113
+ list[dict]
114
+ List of model information dictionaries from Copilot API
115
+
116
+ Examples
117
+ --------
118
+ >>> from featcopilot.utils import list_models
119
+ >>> models = list_models()
120
+ >>> for m in models:
121
+ ... print(m)
122
+
123
+ >>> # With verbose output
124
+ >>> list_models(verbose=True)
125
+
126
+ >>> # Filter by provider (if supported by returned data)
127
+ >>> openai_models = list_models(provider='OpenAI')
128
+ """
129
+ models = fetch_models(force_refresh=force_refresh)
130
+
131
+ # Apply provider filter if specified
132
+ if provider and models:
133
+ filtered = []
134
+ for m in models:
135
+ model_provider = m.get("provider", "") or m.get("vendor", "") or ""
136
+ if provider.lower() in model_provider.lower():
137
+ filtered.append(m)
138
+ models = filtered
139
+
140
+ if verbose:
141
+ _print_models(models)
142
+
143
+ return models
144
+
145
+
146
+ def get_model_info(model_name: str, force_refresh: bool = False) -> Optional[dict]:
147
+ """
148
+ Get information about a specific model from Copilot.
149
+
150
+ Parameters
151
+ ----------
152
+ model_name : str
153
+ The model identifier
154
+ force_refresh : bool, default=False
155
+ If True, bypass cache and fetch fresh model list
156
+
157
+ Returns
158
+ -------
159
+ dict or None
160
+ Model information if found, None otherwise
161
+
162
+ Examples
163
+ --------
164
+ >>> from featcopilot.utils import get_model_info
165
+ >>> info = get_model_info('gpt-5.2')
166
+ >>> if info:
167
+ ... print(info)
168
+ """
169
+ models = fetch_models(force_refresh=force_refresh)
170
+
171
+ for model in models:
172
+ # Check various possible name fields
173
+ if model.get("id") == model_name:
174
+ return model
175
+ if model.get("name") == model_name:
176
+ return model
177
+ if model.get("model") == model_name:
178
+ return model
179
+
180
+ return None
181
+
182
+
183
+ def get_default_model() -> str:
184
+ """
185
+ Get the default model name.
186
+
187
+ Returns
188
+ -------
189
+ str
190
+ The default model identifier
191
+
192
+ Examples
193
+ --------
194
+ >>> from featcopilot.utils import get_default_model
195
+ >>> model = get_default_model()
196
+ >>> print(model) # 'gpt-5.2'
197
+ """
198
+ return DEFAULT_MODEL
199
+
200
+
201
+ def get_model_names(force_refresh: bool = False) -> list[str]:
202
+ """
203
+ Get list of available model names/identifiers.
204
+
205
+ Parameters
206
+ ----------
207
+ force_refresh : bool, default=False
208
+ If True, bypass cache and fetch fresh model list
209
+
210
+ Returns
211
+ -------
212
+ list[str]
213
+ List of model identifiers
214
+
215
+ Examples
216
+ --------
217
+ >>> from featcopilot.utils import get_model_names
218
+ >>> names = get_model_names()
219
+ >>> print(names)
220
+ """
221
+ models = fetch_models(force_refresh=force_refresh)
222
+ names = []
223
+
224
+ for m in models:
225
+ name = m.get("id") or m.get("name") or m.get("model")
226
+ if name:
227
+ names.append(name)
228
+
229
+ return names
230
+
231
+
232
+ def is_valid_model(model_name: str, force_refresh: bool = False) -> bool:
233
+ """
234
+ Check if a model name is valid/supported.
235
+
236
+ Parameters
237
+ ----------
238
+ model_name : str
239
+ The model identifier to check
240
+ force_refresh : bool, default=False
241
+ If True, bypass cache and fetch fresh model list
242
+
243
+ Returns
244
+ -------
245
+ bool
246
+ True if model is supported, False otherwise
247
+
248
+ Examples
249
+ --------
250
+ >>> from featcopilot.utils import is_valid_model
251
+ >>> is_valid_model('gpt-5.2')
252
+ """
253
+ models = fetch_models(force_refresh=force_refresh)
254
+
255
+ if not models:
256
+ # If we couldn't fetch models, allow any model name
257
+ # (let the Copilot API validate it)
258
+ logger.warning("Could not validate model - Copilot unavailable")
259
+ return True
260
+
261
+ return model_name in get_model_names(force_refresh=False)
262
+
263
+
264
+ def _print_models(models: list[dict]) -> None:
265
+ """Print models information."""
266
+ if not models:
267
+ logger.info("No models found. Copilot SDK may not be available.")
268
+ return
269
+
270
+ logger.info("Available models from Copilot:")
271
+ logger.info("-" * 60)
272
+
273
+ for model in models:
274
+ model_id = model.get("id") or model.get("name") or model.get("model") or "unknown"
275
+ description = model.get("description", "")
276
+ provider = model.get("provider") or model.get("vendor") or ""
277
+
278
+ line = f" {model_id}"
279
+ if provider:
280
+ line += f" ({provider})"
281
+ if description:
282
+ line += f" - {description[:50]}..."
283
+
284
+ logger.info(line)
285
+
286
+ logger.info("-" * 60)
287
+ logger.info(f"Total: {len(models)} models")
@@ -4,6 +4,10 @@ from typing import Any, Callable, Optional
4
4
 
5
5
  import pandas as pd
6
6
 
7
+ from featcopilot.utils.logger import get_logger
8
+
9
+ logger = get_logger(__name__)
10
+
7
11
 
8
12
  def parallel_apply(
9
13
  func: Callable,
@@ -51,7 +55,7 @@ def parallel_apply(
51
55
  except ImportError:
52
56
  # Fallback to sequential processing
53
57
  if verbose:
54
- print("joblib not available, using sequential processing")
58
+ logger.warning("joblib not available, using sequential processing")
55
59
 
56
60
  return [func(row) for _, row in data.iterrows()]
57
61
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: featcopilot
3
- Version: 0.1.0
3
+ Version: 0.3.0
4
4
  Summary: Next-generation LLM-powered auto feature engineering framework with GitHub Copilot SDK
5
5
  Author: FeatCopilot Contributors
6
6
  License: MIT
@@ -28,11 +28,27 @@ Requires-Dist: pydantic>=2.0.0
28
28
  Requires-Dist: joblib>=1.1.0
29
29
  Provides-Extra: llm
30
30
  Requires-Dist: github-copilot-sdk>=0.1.0; extra == "llm"
31
+ Requires-Dist: nest_asyncio>=1.5.0; extra == "llm"
32
+ Provides-Extra: litellm
33
+ Requires-Dist: litellm>=1.0.0; extra == "litellm"
34
+ Requires-Dist: nest_asyncio>=1.5.0; extra == "litellm"
31
35
  Provides-Extra: timeseries
32
36
  Requires-Dist: statsmodels>=0.13.0; extra == "timeseries"
37
+ Provides-Extra: feast
38
+ Requires-Dist: feast>=0.30.0; extra == "feast"
33
39
  Provides-Extra: full
34
40
  Requires-Dist: github-copilot-sdk>=0.1.0; extra == "full"
41
+ Requires-Dist: litellm>=1.0.0; extra == "full"
35
42
  Requires-Dist: statsmodels>=0.13.0; extra == "full"
43
+ Requires-Dist: feast>=0.30.0; extra == "full"
44
+ Requires-Dist: nest_asyncio>=1.5.0; extra == "full"
45
+ Provides-Extra: benchmark
46
+ Requires-Dist: github-copilot-sdk>=0.1.0; extra == "benchmark"
47
+ Requires-Dist: statsmodels>=0.13.0; extra == "benchmark"
48
+ Requires-Dist: flaml[automl,blendsearch]>=2.0.0; extra == "benchmark"
49
+ Requires-Dist: autogluon.tabular[fastai]>=1.5.0; extra == "benchmark"
50
+ Requires-Dist: h2o>=3.40.0; extra == "benchmark"
51
+ Requires-Dist: numpy<2; extra == "benchmark"
36
52
  Provides-Extra: dev
37
53
  Requires-Dist: pytest>=7.0.0; extra == "dev"
38
54
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
@@ -44,32 +60,39 @@ Requires-Dist: pre-commit>=3.6.0; extra == "dev"
44
60
 
45
61
  # FeatCopilot 🚀
46
62
 
47
- **Next-Generation LLM-Powered Auto Feature Engineering with GitHub Copilot SDK**
63
+ **Next-Generation LLM-Powered Auto Feature Engineering Framework**
48
64
 
49
- FeatCopilot is a unified feature engineering framework that combines the best approaches from existing libraries (Featuretools, TSFresh, AutoFeat, OpenFE) with novel LLM-powered capabilities via GitHub Copilot SDK.
65
+ FeatCopilot automatically generates, selects, and explains predictive features using semantic understanding. It analyzes column meanings, applies domain-aware transformations, and provides human-readable explanations—turning raw data into ML-ready features in seconds.
66
+
67
+ ## 🎬 Introduction Video
68
+
69
+ [![FeatCopilot Introduction](https://img.youtube.com/vi/H7m50TLGHFk/0.jpg)](https://www.youtube.com/watch?v=H7m50TLGHFk)
50
70
 
51
71
  ## 📊 Benchmark Highlights
52
72
 
53
- ### Tabular Engine (Fast Mode - <1s)
73
+ ### Simple Models Benchmark (42 Datasets)
74
+
75
+ | Configuration | Improved | Avg Improvement | Best Improvement |
76
+ |---------------|----------|-----------------|------------------|
77
+ | **Tabular Engine** | 20 (48%) | +4.54% | +197% (delays_zurich) |
78
+ | **Tabular + LLM** | 23 (55%) | +6.12% | +420% (delays_zurich) |
79
+
80
+ Models: RandomForest (n_estimators=200, max_depth=20), LogisticRegression/Ridge
54
81
 
55
- | Task Type | Average Improvement | Best Case |
56
- |-----------|--------------------:|----------:|
57
- | **Text Classification** | **+12.44%** | +49.02% (News Headlines) |
58
- | Time Series | +1.51% | +12.12% (Retail Demand) |
59
- | Classification | +0.54% | +4.35% |
60
- | Regression | +0.65% | +5.57% |
82
+ ### AutoML Benchmark (FLAML, 120s budget)
61
83
 
62
- ### LLM Engine (With Copilot - 30-60s)
84
+ | Metric | Value |
85
+ |--------|-------|
86
+ | **Datasets** | 41 |
87
+ | **Improved** | 19 (46%) |
88
+ | **Best Improvement** | +8.55% (abalone) |
63
89
 
64
- | Task Type | Average Improvement | Best Case |
65
- |-----------|--------------------:|----------:|
66
- | **Regression** | **+7.79%** | +19.66% (Retail Demand) |
67
- | Classification | +2.38% | +2.87% |
90
+ ### Key Results
68
91
 
69
- - ✅ **12/12 wins** on text classification (tabular mode)
70
- - 🧠 **+19.66% max improvement** with LLM-powered features
71
- - **<1 second** (tabular) or **30-60s** (with LLM) processing time
72
- - 📈 Largest gains with simple models (LogisticRegression, Ridge)
92
+ - ✅ **+197% improvement** on delays_zurich (tabular only)
93
+ - 🧠 **+420% improvement** with LLM-enhanced features
94
+ - 📈 **+8.98%** on abalone regression task
95
+ - 🚀 **+5.68%** on complex_classification
73
96
 
74
97
  [View Full Benchmark Results](https://thinkall.github.io/featcopilot/user-guide/benchmarks/)
75
98
 
@@ -87,7 +110,7 @@ FeatCopilot is a unified feature engineering framework that combines the best ap
87
110
  # Basic installation
88
111
  pip install featcopilot
89
112
 
90
- # With LLM capabilities (requires GitHub Copilot)
113
+ # With LLM capabilities
91
114
  pip install featcopilot[llm]
92
115
 
93
116
  # Full installation
@@ -111,12 +134,12 @@ X_transformed = engineer.fit_transform(X, y) # <1 second
111
134
  print(f"Features: {X.shape[1]} -> {X_transformed.shape[1]}")
112
135
  ```
113
136
 
114
- ### LLM Mode (With Copilot)
137
+ ### LLM Mode (With LiteLLM)
115
138
 
116
139
  ```python
117
140
  from featcopilot import AutoFeatureEngineer
118
141
 
119
- # LLM-powered semantic features (+19.66% max improvement)
142
+ # LLM-powered semantic features (+420% max improvement)
120
143
  engineer = AutoFeatureEngineer(
121
144
  engines=['tabular', 'llm'],
122
145
  max_features=50
@@ -164,16 +187,24 @@ engine = TimeSeriesEngine(
164
187
  ```
165
188
 
166
189
  ### LLM Engine
167
- Uses GitHub Copilot SDK for intelligent feature generation.
190
+ Uses GitHub Copilot SDK (default) or LiteLLM (100+ providers) for intelligent feature generation.
168
191
 
169
192
  ```python
170
193
  from featcopilot.llm import SemanticEngine
171
194
 
195
+ # Default: GitHub Copilot SDK
172
196
  engine = SemanticEngine(
173
- model='gpt-5',
197
+ model='gpt-5.2',
174
198
  max_suggestions=20,
175
199
  validate_features=True
176
200
  )
201
+
202
+ # Alternative: LiteLLM backend
203
+ engine = SemanticEngine(
204
+ model='gpt-4o',
205
+ backend='litellm',
206
+ max_suggestions=20
207
+ )
177
208
  ```
178
209
 
179
210
  ## Feature Selection
@@ -211,7 +242,7 @@ X_selected = selector.fit_transform(X, y)
211
242
 
212
243
  - Python 3.9+
213
244
  - NumPy, Pandas, Scikit-learn
214
- - GitHub Copilot CLI (for LLM features)
245
+ - GitHub Copilot SDK (default) or LiteLLM (for 100+ LLM providers)
215
246
 
216
247
  ## License
217
248
 
@@ -0,0 +1,38 @@
1
+ featcopilot/__init__.py,sha256=nTvN_SeJQwZWbiZopiPcB56MF34ONLP5CVKgpml1xcE,1057
2
+ featcopilot/core/__init__.py,sha256=FA_2a1JRjEgqaYLiWD8turixWBJzWwD9WhaUZaaUBtk,417
3
+ featcopilot/core/base.py,sha256=lN1zfV6GHCNy2XSNV9OH2dXtvwrZZsu376kT_ExrZto,6090
4
+ featcopilot/core/feature.py,sha256=BzzRJB6RH5RlaOszIvVqcRfQ2F0vfkP_sctfpYAlb-Y,7441
5
+ featcopilot/core/registry.py,sha256=EK4lleLShhMkGRXI1evv6SsVO81rpLLkzJbjImHryJE,4030
6
+ featcopilot/core/transform_rule.py,sha256=aCT3Fvvgi7hFnFn9t0CevY8UpT3ZABwGCZvTr2P9uBo,9420
7
+ featcopilot/engines/__init__.py,sha256=bXY5eiEQTZ9IxPY1fTESw4v1-nXFkegSs8p4VYGr7TQ,360
8
+ featcopilot/engines/relational.py,sha256=MUqOZgOwKmp7sMsE7lCMbLEjqekBPpcdLXeXkCEKzPM,8402
9
+ featcopilot/engines/tabular.py,sha256=8OMFl3TyfZPDwIyOnhLmcAvGw5INI92Ws6KYSe-BOPY,17733
10
+ featcopilot/engines/text.py,sha256=EWmSftvZ9z-JQFG4I194uKf81PPG_jluToajoPcyTRk,21998
11
+ featcopilot/engines/timeseries.py,sha256=0erGr987-H_a5iQuKhLVK8Zk1_8KJs7H6-09pU1O1oU,22188
12
+ featcopilot/llm/__init__.py,sha256=i_g4veX3aPFRSpffP3h-IZN-VvaWSMtfNT5kE7fup5w,735
13
+ featcopilot/llm/code_generator.py,sha256=p6qSSZ4ul8kxOBjmnAEAU_1dwtVMJWqIfDiM5UXkZqY,9814
14
+ featcopilot/llm/copilot_client.py,sha256=5ZjYQ5JO__RIxVV4_ZFZ-75gFMfgWoTv99uE9I7KXTg,20268
15
+ featcopilot/llm/explainer.py,sha256=5ukhm27zqyH3oHDOgCHrw3OeJMDEt9olIOYD_hTHqbA,6232
16
+ featcopilot/llm/litellm_client.py,sha256=HSrzJ9-cvxaDdqv142cgoeAqJ2WcIcwVhgz1Jb-PPv8,20443
17
+ featcopilot/llm/semantic_engine.py,sha256=2OC04PwUEYnBwe6MFLT0aPW1HzW2egP8vQsBNeT13LI,40309
18
+ featcopilot/llm/transform_rule_generator.py,sha256=2LUXshjLh-IRMdYgm5s6Vjs_Pvna_Hgbwg66efzs_1s,13510
19
+ featcopilot/selection/__init__.py,sha256=pjoos64ym3CR7Hk75qq2dY0NN4OT0Sn3hiBSG_h44SE,406
20
+ featcopilot/selection/importance.py,sha256=ieCZw4PvqLtoyl_mD349GBSOwnsrCAszwMbQYMcDqFc,6606
21
+ featcopilot/selection/redundancy.py,sha256=aRFlrwlYXWIrt2cEuciNSenvYj2eTb5lHuWCKhje6aw,7069
22
+ featcopilot/selection/statistical.py,sha256=Jowj5dMxzHkO96M6jROTJtu0tX9N3W99AThYO9bt8os,9226
23
+ featcopilot/selection/unified.py,sha256=xmVkXIMDqnCeyQE6OES3y1kVfnqImE7oHNbTVDo9bpc,9057
24
+ featcopilot/stores/__init__.py,sha256=KCcspMcFfm3-OA5JrcXgNHipYbgNWsK3zg0jAlp0syA,526
25
+ featcopilot/stores/base.py,sha256=VzHUA1IYMUiP4-cE4SXt_xmgkk2raIz09-9aZ6szOxQ,4395
26
+ featcopilot/stores/feast_store.py,sha256=ej6b05JRMwXqQ8pTorxKH8LQ3JTlwzGAGNckZPzq7d8,19032
27
+ featcopilot/stores/rule_store.py,sha256=HZQ0eQv-P3w5R7hl-syeOnIgI8V38hpZZl5u4WMHPEs,9924
28
+ featcopilot/transformers/__init__.py,sha256=pHHSivxNVyC9AmKzdA8UJS0B-b9V1B4eI1QgTP0Z8uw,234
29
+ featcopilot/transformers/sklearn_compat.py,sha256=yXBhxfkU9VOBgpb-bS-1L4hUUUuqG0Hg2xFxx0N5zBE,14082
30
+ featcopilot/utils/__init__.py,sha256=aWRMS_4sZHdw8eTHBYT_O4qMYuM9EHsPGPlo5a-PzaE,489
31
+ featcopilot/utils/cache.py,sha256=CYIVXQU9dpVdrLkemhjVAoCzXRMRzuQ-U36-q_8zDoc,6489
32
+ featcopilot/utils/logger.py,sha256=qJe4OT13TPanF-vebfs8BILmwkuV8zi2KSHlAUDaSnU,1334
33
+ featcopilot/utils/models.py,sha256=X9amoyLjy8umaCvbp0G6BkmzmasvAYZc2xVKvD6yeAA,7317
34
+ featcopilot/utils/parallel.py,sha256=k0ePtnI48aXNomD0lBBptla0RlhCX1-5xyEDD9zbkDQ,2963
35
+ featcopilot-0.3.0.dist-info/METADATA,sha256=0l3NT1k8X83RnIyz5mAPMMb5ZPVzFeJ_R-LX83NBDew,7936
36
+ featcopilot-0.3.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
37
+ featcopilot-0.3.0.dist-info/top_level.txt,sha256=Lf6lB8VBDX71TBzSXW3qq44RO5hIUKQ6DMi_dL8G_Ak,12
38
+ featcopilot-0.3.0.dist-info/RECORD,,
@@ -1,29 +0,0 @@
1
- featcopilot/__init__.py,sha256=Ljn4cK5Emw_Rh8rg-T1EqDoyuWz_GXCAkiaZ_amz-cA,708
2
- featcopilot/core/__init__.py,sha256=TX_AsPRsVDY1ZKO-ApK7qBFhbgngQbYNamhzYU9P3P8,338
3
- featcopilot/core/base.py,sha256=lN1zfV6GHCNy2XSNV9OH2dXtvwrZZsu376kT_ExrZto,6090
4
- featcopilot/core/feature.py,sha256=YGE-xDj7cRZDA50Oa5W-USXiEZ1NrX3WagZueRQiZbk,7361
5
- featcopilot/core/registry.py,sha256=EK4lleLShhMkGRXI1evv6SsVO81rpLLkzJbjImHryJE,4030
6
- featcopilot/engines/__init__.py,sha256=bXY5eiEQTZ9IxPY1fTESw4v1-nXFkegSs8p4VYGr7TQ,360
7
- featcopilot/engines/relational.py,sha256=0zr8OhCRg-jvch1HRaxR6RgQFti3McDPvdco-onsUTc,8311
8
- featcopilot/engines/tabular.py,sha256=M5cynbfNzkFilxV2rPG5kIcEwni-wc_HtjGNuGiSXGU,10781
9
- featcopilot/engines/text.py,sha256=I9OGN0Rwf2SW1V9shaJDmmud1eymnx5xLdSmLfCzKhU,7396
10
- featcopilot/engines/timeseries.py,sha256=76YE5QAD-yzXdajeP3wP3cfqtRSOZglz-E-OVSnvvs8,13553
11
- featcopilot/llm/__init__.py,sha256=75MgMNw8cAggNOUAJV8ib1uV_UCTjA04tdYbqWNwumU,468
12
- featcopilot/llm/code_generator.py,sha256=dAn5n3fp-sWj3DhQ9I-ZME5bYSXRVSe4Blx5P-W484Q,9715
13
- featcopilot/llm/copilot_client.py,sha256=BLAENfNjkyOvgeVWQt-94mkTtxcdz5esk0ro6iaUCPM,17328
14
- featcopilot/llm/explainer.py,sha256=fztidSmLX5dmbPRMcLmgXNv7AvDEJjXM5OzD6NFtQjQ,6142
15
- featcopilot/llm/semantic_engine.py,sha256=U4CQ-OsWEr_c2Q8HF6yN7jXhKpTaSR6lft-lEacBzXo,12554
16
- featcopilot/selection/__init__.py,sha256=pjoos64ym3CR7Hk75qq2dY0NN4OT0Sn3hiBSG_h44SE,406
17
- featcopilot/selection/importance.py,sha256=GzSHTwKIeHJt42mzb1x8ClGFnqU9_2MxV1kOce9SODg,5481
18
- featcopilot/selection/redundancy.py,sha256=bz47JQtEBKoz9eMIMB3YMOxH_1s7q1OsEUE_Ob3t0xg,5301
19
- featcopilot/selection/statistical.py,sha256=POuWuMoyggJt1bCML10I6C7gKZoUP7Yc4nMsKBwECYs,6184
20
- featcopilot/selection/unified.py,sha256=UPrTJ0svTjy6SnqQVeyiAGNjkgTRbXO_AzbucGZNUjc,6273
21
- featcopilot/transformers/__init__.py,sha256=pHHSivxNVyC9AmKzdA8UJS0B-b9V1B4eI1QgTP0Z8uw,234
22
- featcopilot/transformers/sklearn_compat.py,sha256=z5oA_y8YENQaGTTnR13u7CWhJpIhNmUoQP-DNVIgPeA,13536
23
- featcopilot/utils/__init__.py,sha256=PH-fC1WYJYevcMVI4CCoXIUTJlb5lPXwKeKNj56vs_k,198
24
- featcopilot/utils/cache.py,sha256=CYIVXQU9dpVdrLkemhjVAoCzXRMRzuQ-U36-q_8zDoc,6489
25
- featcopilot/utils/parallel.py,sha256=MjLAYWYgoeu02IoWNWEZ82sCcRDi5bICJVcSq7dXmN4,2874
26
- featcopilot-0.1.0.dist-info/METADATA,sha256=EI1MSGG2KkICOCRnLX1CI5-v91N40pmRS6oyAVgk1w4,6804
27
- featcopilot-0.1.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
28
- featcopilot-0.1.0.dist-info/top_level.txt,sha256=Lf6lB8VBDX71TBzSXW3qq44RO5hIUKQ6DMi_dL8G_Ak,12
29
- featcopilot-0.1.0.dist-info/RECORD,,