ollama-client 0.2.5 → 0.2.6

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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +138 -76
  4. data/docs/EXAMPLE_REORGANIZATION.md +412 -0
  5. data/docs/GETTING_STARTED.md +361 -0
  6. data/docs/INTEGRATION_TESTING.md +170 -0
  7. data/docs/NEXT_STEPS_SUMMARY.md +114 -0
  8. data/docs/PERSONAS.md +383 -0
  9. data/docs/QUICK_START.md +195 -0
  10. data/docs/TESTING.md +392 -170
  11. data/docs/TEST_CHECKLIST.md +450 -0
  12. data/examples/README.md +51 -66
  13. data/examples/basic_chat.rb +33 -0
  14. data/examples/basic_generate.rb +29 -0
  15. data/examples/tool_calling_parsing.rb +59 -0
  16. data/exe/ollama-client +128 -1
  17. data/lib/ollama/agent/planner.rb +7 -2
  18. data/lib/ollama/chat_session.rb +101 -0
  19. data/lib/ollama/client.rb +41 -35
  20. data/lib/ollama/config.rb +4 -1
  21. data/lib/ollama/document_loader.rb +1 -1
  22. data/lib/ollama/embeddings.rb +41 -26
  23. data/lib/ollama/errors.rb +1 -0
  24. data/lib/ollama/personas.rb +287 -0
  25. data/lib/ollama/version.rb +1 -1
  26. data/lib/ollama_client.rb +7 -0
  27. metadata +14 -48
  28. data/examples/advanced_complex_schemas.rb +0 -366
  29. data/examples/advanced_edge_cases.rb +0 -241
  30. data/examples/advanced_error_handling.rb +0 -200
  31. data/examples/advanced_multi_step_agent.rb +0 -341
  32. data/examples/advanced_performance_testing.rb +0 -186
  33. data/examples/chat_console.rb +0 -143
  34. data/examples/complete_workflow.rb +0 -245
  35. data/examples/dhan_console.rb +0 -843
  36. data/examples/dhanhq/README.md +0 -236
  37. data/examples/dhanhq/agents/base_agent.rb +0 -74
  38. data/examples/dhanhq/agents/data_agent.rb +0 -66
  39. data/examples/dhanhq/agents/orchestrator_agent.rb +0 -120
  40. data/examples/dhanhq/agents/technical_analysis_agent.rb +0 -252
  41. data/examples/dhanhq/agents/trading_agent.rb +0 -81
  42. data/examples/dhanhq/analysis/market_structure.rb +0 -138
  43. data/examples/dhanhq/analysis/pattern_recognizer.rb +0 -192
  44. data/examples/dhanhq/analysis/trend_analyzer.rb +0 -88
  45. data/examples/dhanhq/builders/market_context_builder.rb +0 -67
  46. data/examples/dhanhq/dhanhq_agent.rb +0 -829
  47. data/examples/dhanhq/indicators/technical_indicators.rb +0 -158
  48. data/examples/dhanhq/scanners/intraday_options_scanner.rb +0 -492
  49. data/examples/dhanhq/scanners/swing_scanner.rb +0 -247
  50. data/examples/dhanhq/schemas/agent_schemas.rb +0 -61
  51. data/examples/dhanhq/services/base_service.rb +0 -46
  52. data/examples/dhanhq/services/data_service.rb +0 -118
  53. data/examples/dhanhq/services/trading_service.rb +0 -59
  54. data/examples/dhanhq/technical_analysis_agentic_runner.rb +0 -411
  55. data/examples/dhanhq/technical_analysis_runner.rb +0 -420
  56. data/examples/dhanhq/test_tool_calling.rb +0 -538
  57. data/examples/dhanhq/test_tool_calling_verbose.rb +0 -251
  58. data/examples/dhanhq/utils/instrument_helper.rb +0 -32
  59. data/examples/dhanhq/utils/parameter_cleaner.rb +0 -28
  60. data/examples/dhanhq/utils/parameter_normalizer.rb +0 -45
  61. data/examples/dhanhq/utils/rate_limiter.rb +0 -23
  62. data/examples/dhanhq/utils/trading_parameter_normalizer.rb +0 -72
  63. data/examples/dhanhq_agent.rb +0 -964
  64. data/examples/dhanhq_tools.rb +0 -1663
  65. data/examples/multi_step_agent_with_external_data.rb +0 -368
  66. data/examples/structured_outputs_chat.rb +0 -72
  67. data/examples/structured_tools.rb +0 -89
  68. data/examples/test_dhanhq_tool_calling.rb +0 -375
  69. data/examples/test_tool_calling.rb +0 -160
  70. data/examples/tool_calling_direct.rb +0 -124
  71. data/examples/tool_calling_pattern.rb +0 -269
  72. data/exe/dhan_console +0 -4
@@ -1,88 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "market_structure"
4
- require_relative "pattern_recognizer"
5
- require_relative "../indicators/technical_indicators"
6
-
7
- module DhanHQ
8
- module Analysis
9
- # Comprehensive trend analysis
10
- class TrendAnalyzer
11
- def self.analyze(ohlc_data)
12
- return {} if ohlc_data.nil? || ohlc_data.empty?
13
-
14
- closes = extract_closes(ohlc_data)
15
- highs = extract_highs(ohlc_data)
16
- lows = extract_lows(ohlc_data)
17
- opens = extract_opens(ohlc_data)
18
- volumes = extract_volumes(ohlc_data)
19
-
20
- return {} if closes.nil? || closes.empty?
21
-
22
- # Technical indicators
23
- sma20 = DhanHQ::Indicators::TechnicalIndicators.sma(closes, 20)
24
- sma50 = DhanHQ::Indicators::TechnicalIndicators.sma(closes, 50)
25
- ema12 = DhanHQ::Indicators::TechnicalIndicators.ema(closes, 12)
26
- rsi = DhanHQ::Indicators::TechnicalIndicators.rsi(closes, 14)
27
- macd = DhanHQ::Indicators::TechnicalIndicators.macd(closes)
28
-
29
- # Market structure
30
- trend = MarketStructure.analyze_trend(highs, lows, closes)
31
- structure_break = MarketStructure.detect_structure_break(highs, lows, closes)
32
- support_resistance = DhanHQ::Indicators::TechnicalIndicators.support_resistance(highs, lows, closes)
33
-
34
- # Patterns
35
- candlestick_patterns = PatternRecognizer.detect_candlestick_patterns(opens, highs, lows, closes)
36
- chart_patterns = PatternRecognizer.detect_chart_patterns(highs, lows, closes)
37
-
38
- # SMC Analysis
39
- order_blocks = MarketStructure.find_order_blocks(highs, lows, closes, volumes || [])
40
- liquidity_zones = MarketStructure.find_liquidity_zones(highs, lows, closes)
41
-
42
- {
43
- trend: trend,
44
- structure_break: structure_break,
45
- indicators: {
46
- sma20: sma20.last,
47
- sma50: sma50.last,
48
- ema12: ema12.last,
49
- rsi: rsi.last,
50
- macd: macd[:macd].last,
51
- macd_signal: macd[:signal].last,
52
- macd_histogram: macd[:histogram].last
53
- },
54
- support_resistance: support_resistance,
55
- patterns: {
56
- candlestick: candlestick_patterns.last(5),
57
- chart: chart_patterns
58
- },
59
- smc: {
60
- order_blocks: order_blocks.last(3),
61
- liquidity_zones: liquidity_zones
62
- },
63
- current_price: closes.last
64
- }
65
- end
66
-
67
- def self.extract_closes(data)
68
- data.map { |d| d[:close] || d["close"] || d["c"] || d[:c] }.compact
69
- end
70
-
71
- def self.extract_highs(data)
72
- data.map { |d| d[:high] || d["high"] || d["h"] || d[:h] }.compact
73
- end
74
-
75
- def self.extract_lows(data)
76
- data.map { |d| d[:low] || d["low"] || d["l"] || d[:l] }.compact
77
- end
78
-
79
- def self.extract_opens(data)
80
- data.map { |d| d[:open] || d["open"] || d["o"] || d[:o] }.compact
81
- end
82
-
83
- def self.extract_volumes(data)
84
- data.map { |d| d[:volume] || d["volume"] || d["v"] || d[:v] }.compact
85
- end
86
- end
87
- end
88
- end
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DhanHQ
4
- module Builders
5
- # Builds human-readable market context from raw market data
6
- class MarketContextBuilder
7
- def self.build(market_data)
8
- new(market_data).build
9
- end
10
-
11
- def initialize(market_data)
12
- @market_data = market_data || {}
13
- end
14
-
15
- def build
16
- context_parts = []
17
- context_parts << build_nifty_context
18
- context_parts << build_reliance_context
19
- context_parts << build_positions_context
20
- context_parts.compact.join("\n")
21
- end
22
-
23
- private
24
-
25
- def build_nifty_context
26
- return "NIFTY data not available" unless @market_data[:nifty]
27
-
28
- ltp = @market_data[:nifty][:ltp]
29
- change = @market_data[:nifty][:change_percent]
30
-
31
- if ltp && ltp != 0
32
- "NIFTY is trading at #{ltp} (#{change || 'unknown'}% change)"
33
- else
34
- "NIFTY data retrieved but LTP is not available (may be outside market hours)"
35
- end
36
- end
37
-
38
- def build_reliance_context
39
- return "RELIANCE data not available" unless @market_data[:reliance]
40
-
41
- ltp = @market_data[:reliance][:ltp]
42
- change = @market_data[:reliance][:change_percent]
43
- volume = @market_data[:reliance][:volume]
44
-
45
- if ltp && ltp != 0
46
- "RELIANCE is at #{ltp} (#{change || 'unknown'}% change, Volume: #{volume || 'N/A'})"
47
- else
48
- "RELIANCE data retrieved but LTP is not available (may be outside market hours)"
49
- end
50
- end
51
-
52
- def build_positions_context
53
- positions = @market_data[:positions] || []
54
-
55
- if positions.empty?
56
- "Current positions: None"
57
- else
58
- parts = ["Current positions: #{positions.length} active"]
59
- positions.each do |pos|
60
- parts << " - #{pos[:trading_symbol]}: #{pos[:quantity]} @ #{pos[:average_price]}"
61
- end
62
- parts.join("\n")
63
- end
64
- end
65
- end
66
- end
67
- end