import os import sys import gradio as gr from PIL import Image import ollama from lightweight_charts import Chart # Add ai-analyzer's src to path current_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, current_dir) # Initialize both AI models vision_client = ollama.Client() code_client = ollama.Client() VISION_MODEL = "llama3.2-vision:latest" CODE_MODEL = "codellama:latest" # Local imports from src.model.vision_model import ChartVisionModel from src.model.chart_generator import ChartGeneratorModel from src.analysis.chart_processor import ChartProcessor from src.analysis.pattern_generator import PatternGenerator from src.analysis.indicator_generator import IndicatorGenerator from src.analysis.chart_analyzer import ChartAnalyzer from src.data.market_data import MarketData def analyze_full_chart(chart_image, symbol): # Vision analysis using ChartVisionModel vision_model = ChartVisionModel() vision_analysis = vision_model.analyze_chart(chart_image) # Chart generation using ChartGeneratorModel chart_generator = ChartGeneratorModel() market_data = MarketData() historical_data = market_data.fetch_ohlcv(symbol) # Pattern Generation pattern_gen = PatternGenerator() pattern_images = pattern_gen.generate_all_patterns(chart_image, historical_data) # Indicator Generation indicator_gen = IndicatorGenerator() indicator_charts = indicator_gen.generate_all_indicators(historical_data) # Process chart processor = ChartProcessor() processed_results = processor.process_chart(chart_image) # Full chart analysis analyzer = ChartAnalyzer() analysis_results = analyzer.analyze_full( chart_image=chart_image, pattern_images=pattern_images, indicator_charts=indicator_charts, historical_data=historical_data ) return { 'pattern_analysis': analysis_results.patterns, 'indicator_analysis': analysis_results.indicators, 'predictions': analysis_results.predictions, 'interactive_charts': indicator_charts, 'chart_analysis': processed_results, 'vision_results': vision_analysis } interface = gr.Interface( fn=analyze_full_chart, inputs=[ gr.Image(type="pil", label="Chart Image"), gr.Textbox(label="Symbol") ], outputs=[ gr.Gallery(label="Pattern Overlays"), gr.Gallery(label="Indicator Charts"), gr.JSON(label="Analysis Results"), gr.Plot(label="Interactive Indicators") ] ) if __name__ == "__main__": interface.launch()