clag 0.0.2 → 0.0.3

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: 590439d5a481273f60f73e23d193490499a0bc6f9c400fa6239f00e790f31191
4
- data.tar.gz: 2b35f0ef8b99e0185761275a405aa44363380df88a0f53449a3e3e1208159659
3
+ metadata.gz: f35aebcc5178b31dd6c9b83463a433ed363538234795557ef5b57d02608e1478
4
+ data.tar.gz: 9179d6d67b9d36263e9568d8e915f13a249fbe8103bce529ecf8ecd86f5eff04
5
5
  SHA512:
6
- metadata.gz: 87982f697b62eb353350fea66026841e8b0815bff79fea7407b7d3159ecc85aaefad4fab52a0c0f40dbd5389f5b83fa47b86dd6951de7fbd8ba33de58beae4a4
7
- data.tar.gz: 637a5801e9e52443e7bd694fedbef83f1baa9fd624ad263c9abe00f2874760a4ec3bccb5205bf14e33e1d50df323dc921cc8a52df3541f22849fc7640ece90cf
6
+ metadata.gz: 673ac864ebd2e5e2b008811f10b69f2d2a4fe053dc2aaa72f66ac1057e79e4871e81af729ee59869a5f32b0f968c68e808388a25be666d75e161379d39fa8422
7
+ data.tar.gz: 303d55dce5f0780aa227719327ec550f64a710be8e7af978065971f5e03d4a59ffdee5cc91373eb0959f67c817f5cbe301c92c890a9ffafa7f6aaa8223847c99
data/clag.gemspec CHANGED
@@ -23,6 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency 'httparty', '~> 0.21'
24
24
  spec.add_dependency 'clipboard', '~> 1.3'
25
25
  spec.add_dependency 'activesupport'
26
+ spec.add_dependency "pry"
27
+ spec.add_dependency "nokogiri"
26
28
 
27
29
  spec.add_development_dependency 'rake', '~> 10.0'
28
30
  end
data/lib/clag/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Clag
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
@@ -1,5 +1,7 @@
1
1
  require "openai"
2
+ require "pry"
2
3
  require "httparty"
4
+ require "nokogiri"
3
5
 
4
6
  module Sublayer
5
7
  module Capabilities
@@ -16,14 +18,74 @@ module Sublayer
16
18
  end
17
19
 
18
20
  def llm_generate
19
- if ENV["CLAG_LLM"] == "gemini"
21
+ case ENV["CLAG_LLM"]
22
+ when "gemini"
20
23
  generate_with_gemini
24
+ when "claude"
25
+ generate_with_claude
21
26
  else
22
27
  generate_with_openai
23
28
  end
24
29
  end
25
30
 
26
31
  private
32
+ def generate_with_claude
33
+ system_prompt = <<-PROMPT
34
+ In this environment you have access to a set of tools you can use to answer the user's question.
35
+
36
+ You may call them like this:
37
+ <function_calls>
38
+ <invoke>
39
+ <tool_name>$TOOL_NAME</tool_name>
40
+ <parameters>
41
+ <$PARAMETER_NAME>$PARAMETER_VALUE</$PARAMETER_NAME>
42
+ ...
43
+ </parameters>
44
+ </invoke>
45
+ </function_calls>
46
+
47
+ Here are the tools available:
48
+ <tools>
49
+ #{self.class::OUTPUT_FUNCTION.to_xml}
50
+ </tools>
51
+
52
+ Respond only with valid xml. The entire response should be wrapped in a <response> tag. Any additional information not inside a tool call should go in a <scratch> tag.
53
+ PROMPT
54
+
55
+ response = HTTParty.post(
56
+ "https://api.anthropic.com/v1/messages",
57
+ headers: {
58
+ "x-api-key": ENV["ANTHROPIC_API_KEY"],
59
+ "anthropic-version": "2023-06-01",
60
+ "content-type": "application/json"
61
+ },
62
+ body: {
63
+ model: "claude-3-opus-20240229",
64
+ max_tokens: 1337,
65
+ system: system_prompt,
66
+ messages: [
67
+ { "role": "user", "content": prompt }
68
+ ]
69
+ }.to_json
70
+ )
71
+
72
+ # raise an error if the response is not a 200
73
+ raise "Error generating with Claude, error: #{response.body}" unless response.code == 200
74
+
75
+ text_containing_xml = JSON.parse(response.body).dig("content", 0, "text")
76
+
77
+ # Extract the xml from the respons contained in <response> tags the content of the string looksl ike this:
78
+ xml = text_containing_xml.match(/\<response\>(.*?)\<\/response\>/m).to_s
79
+
80
+ # Parse the xml and extract the response
81
+ response_xml = Nokogiri::XML(xml)
82
+
83
+ # Extract the response from the xml
84
+ function_output = response_xml.at_xpath("//response/function_calls/invoke/parameters/command").children.to_s
85
+
86
+ return function_output
87
+ end
88
+
27
89
  def generate_with_gemini
28
90
  gemini_prompt = adapt_prompt_for_gemini
29
91
 
@@ -14,9 +14,8 @@ module Sublayer
14
14
  raise NotImplementedError
15
15
  end
16
16
 
17
- private
18
-
19
- def list_of_objects_hash
17
+ def to_xml
18
+ raise NotImplementedError
20
19
  end
21
20
  end
22
21
  end
@@ -21,6 +21,20 @@ module Sublayer
21
21
  }
22
22
  }
23
23
  end
24
+
25
+ def to_xml
26
+ <<-XML
27
+ <tool_description>
28
+ <tool_name>#{@name}</tool_name>
29
+ <tool_description>#{@description}</tool_description>
30
+ <parameters>
31
+ <name>#{@name}</name>
32
+ <type>string</type>
33
+ <description>#{@description}</description>
34
+ </parameters>
35
+ </tool_description>
36
+ XML
37
+ end
24
38
  end
25
39
  end
26
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Werner
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-21 00:00:00.000000000 Z
11
+ date: 2024-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cli-kit
@@ -94,6 +94,34 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: nokogiri
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: rake
99
127
  requirement: !ruby/object:Gem::Requirement