Spaces:
Runtime error
Runtime error
Update pattern_analyzer.py
Browse files- pattern_analyzer.py +17 -13
pattern_analyzer.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
import os
|
| 2 |
os.environ['HF_HOME'] = '/tmp/huggingface'
|
|
|
|
| 3 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 4 |
import torch
|
| 5 |
import json
|
|
@@ -12,20 +13,28 @@ class PatternAnalyzer:
|
|
| 12 |
"device_map": "auto",
|
| 13 |
"torch_dtype": torch.float32,
|
| 14 |
"low_cpu_mem_usage": True,
|
| 15 |
-
"max_memory": {
|
| 16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
}
|
| 18 |
-
|
| 19 |
self.model = AutoModelForCausalLM.from_pretrained(
|
| 20 |
"tmmdev/codellama-pattern-analysis",
|
| 21 |
-
**model_kwargs
|
|
|
|
|
|
|
|
|
|
| 22 |
)
|
| 23 |
-
|
| 24 |
self.tokenizer = AutoTokenizer.from_pretrained(
|
| 25 |
"tmmdev/codellama-pattern-analysis",
|
| 26 |
use_fast=True
|
| 27 |
)
|
| 28 |
-
|
| 29 |
self.basic_patterns = {
|
| 30 |
'channel': {'min_points': 4, 'confidence_threshold': 0.7},
|
| 31 |
'triangle': {'min_points': 3, 'confidence_threshold': 0.75},
|
|
@@ -34,6 +43,7 @@ class PatternAnalyzer:
|
|
| 34 |
'double_top': {'max_deviation': 0.02, 'confidence_threshold': 0.85},
|
| 35 |
'double_bottom': {'max_deviation': 0.02, 'confidence_threshold': 0.85}
|
| 36 |
}
|
|
|
|
| 37 |
self.pattern_logic = PatternLogic()
|
| 38 |
|
| 39 |
def analyze_data(self, ohlcv_data):
|
|
@@ -44,16 +54,13 @@ class PatternAnalyzer:
|
|
| 44 |
2. Triangle: Must have clear convergence point
|
| 45 |
3. Support: Minimum 3 price bounces
|
| 46 |
4. Resistance: Minimum 3 price rejections
|
| 47 |
-
|
| 48 |
INPUT DATA:
|
| 49 |
{ohlcv_data.to_json(orient='records')}
|
| 50 |
-
|
| 51 |
Return ONLY high-confidence patterns (>0.8) in JSON format with exact price coordinates."""
|
| 52 |
|
| 53 |
inputs = self.tokenizer(data_prompt, return_tensors="pt")
|
| 54 |
outputs = self.model.generate(**inputs, max_length=1000)
|
| 55 |
analysis = self.tokenizer.decode(outputs[0])
|
| 56 |
-
|
| 57 |
return self.parse_analysis(analysis)
|
| 58 |
|
| 59 |
def parse_analysis(self, analysis_text):
|
|
@@ -61,10 +68,9 @@ class PatternAnalyzer:
|
|
| 61 |
json_start = analysis_text.find('{')
|
| 62 |
json_end = analysis_text.rfind('}') + 1
|
| 63 |
json_str = analysis_text[json_start:json_end]
|
| 64 |
-
|
| 65 |
analysis_data = json.loads(json_str)
|
| 66 |
patterns = []
|
| 67 |
-
|
| 68 |
for pattern in analysis_data.get('patterns', []):
|
| 69 |
pattern_type = pattern.get('type')
|
| 70 |
if pattern_type in self.basic_patterns:
|
|
@@ -79,8 +85,6 @@ class PatternAnalyzer:
|
|
| 79 |
'timestamp': pd.Timestamp.now().isoformat()
|
| 80 |
}
|
| 81 |
})
|
| 82 |
-
|
| 83 |
return patterns
|
| 84 |
-
|
| 85 |
except json.JSONDecodeError:
|
| 86 |
return []
|
|
|
|
| 1 |
import os
|
| 2 |
os.environ['HF_HOME'] = '/tmp/huggingface'
|
| 3 |
+
|
| 4 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 5 |
import torch
|
| 6 |
import json
|
|
|
|
| 13 |
"device_map": "auto",
|
| 14 |
"torch_dtype": torch.float32,
|
| 15 |
"low_cpu_mem_usage": True,
|
| 16 |
+
"max_memory": {
|
| 17 |
+
"cpu": "4GB",
|
| 18 |
+
"disk": "8GB"
|
| 19 |
+
},
|
| 20 |
+
"offload_folder": "/tmp/offload",
|
| 21 |
+
"load_in_8bit": True,
|
| 22 |
+
"revision": "main"
|
| 23 |
}
|
| 24 |
+
|
| 25 |
self.model = AutoModelForCausalLM.from_pretrained(
|
| 26 |
"tmmdev/codellama-pattern-analysis",
|
| 27 |
+
**model_kwargs,
|
| 28 |
+
use_safetensors=True,
|
| 29 |
+
trust_remote_code=True,
|
| 30 |
+
resume_download=True
|
| 31 |
)
|
| 32 |
+
|
| 33 |
self.tokenizer = AutoTokenizer.from_pretrained(
|
| 34 |
"tmmdev/codellama-pattern-analysis",
|
| 35 |
use_fast=True
|
| 36 |
)
|
| 37 |
+
|
| 38 |
self.basic_patterns = {
|
| 39 |
'channel': {'min_points': 4, 'confidence_threshold': 0.7},
|
| 40 |
'triangle': {'min_points': 3, 'confidence_threshold': 0.75},
|
|
|
|
| 43 |
'double_top': {'max_deviation': 0.02, 'confidence_threshold': 0.85},
|
| 44 |
'double_bottom': {'max_deviation': 0.02, 'confidence_threshold': 0.85}
|
| 45 |
}
|
| 46 |
+
|
| 47 |
self.pattern_logic = PatternLogic()
|
| 48 |
|
| 49 |
def analyze_data(self, ohlcv_data):
|
|
|
|
| 54 |
2. Triangle: Must have clear convergence point
|
| 55 |
3. Support: Minimum 3 price bounces
|
| 56 |
4. Resistance: Minimum 3 price rejections
|
|
|
|
| 57 |
INPUT DATA:
|
| 58 |
{ohlcv_data.to_json(orient='records')}
|
|
|
|
| 59 |
Return ONLY high-confidence patterns (>0.8) in JSON format with exact price coordinates."""
|
| 60 |
|
| 61 |
inputs = self.tokenizer(data_prompt, return_tensors="pt")
|
| 62 |
outputs = self.model.generate(**inputs, max_length=1000)
|
| 63 |
analysis = self.tokenizer.decode(outputs[0])
|
|
|
|
| 64 |
return self.parse_analysis(analysis)
|
| 65 |
|
| 66 |
def parse_analysis(self, analysis_text):
|
|
|
|
| 68 |
json_start = analysis_text.find('{')
|
| 69 |
json_end = analysis_text.rfind('}') + 1
|
| 70 |
json_str = analysis_text[json_start:json_end]
|
|
|
|
| 71 |
analysis_data = json.loads(json_str)
|
| 72 |
patterns = []
|
| 73 |
+
|
| 74 |
for pattern in analysis_data.get('patterns', []):
|
| 75 |
pattern_type = pattern.get('type')
|
| 76 |
if pattern_type in self.basic_patterns:
|
|
|
|
| 85 |
'timestamp': pd.Timestamp.now().isoformat()
|
| 86 |
}
|
| 87 |
})
|
|
|
|
| 88 |
return patterns
|
|
|
|
| 89 |
except json.JSONDecodeError:
|
| 90 |
return []
|