raif 1.0.0 → 1.1.0

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +200 -41
  3. data/app/assets/stylesheets/raif/admin/stats.scss +12 -0
  4. data/app/controllers/raif/admin/application_controller.rb +14 -0
  5. data/app/controllers/raif/admin/stats/tasks_controller.rb +25 -0
  6. data/app/controllers/raif/admin/stats_controller.rb +19 -0
  7. data/app/controllers/raif/admin/tasks_controller.rb +18 -2
  8. data/app/controllers/raif/conversations_controller.rb +5 -1
  9. data/app/models/raif/agent.rb +11 -9
  10. data/app/models/raif/agents/native_tool_calling_agent.rb +11 -1
  11. data/app/models/raif/agents/re_act_agent.rb +6 -0
  12. data/app/models/raif/concerns/has_available_model_tools.rb +1 -1
  13. data/app/models/raif/concerns/json_schema_definition.rb +28 -0
  14. data/app/models/raif/concerns/llm_response_parsing.rb +23 -1
  15. data/app/models/raif/concerns/llm_temperature.rb +17 -0
  16. data/app/models/raif/concerns/llms/anthropic/message_formatting.rb +51 -0
  17. data/app/models/raif/concerns/llms/bedrock_claude/message_formatting.rb +70 -0
  18. data/app/models/raif/concerns/llms/message_formatting.rb +41 -0
  19. data/app/models/raif/concerns/llms/open_ai/message_formatting.rb +41 -0
  20. data/app/models/raif/conversation.rb +11 -3
  21. data/app/models/raif/conversation_entry.rb +22 -6
  22. data/app/models/raif/embedding_model.rb +22 -0
  23. data/app/models/raif/embedding_models/bedrock_titan.rb +34 -0
  24. data/app/models/raif/embedding_models/open_ai.rb +40 -0
  25. data/app/models/raif/llm.rb +39 -6
  26. data/app/models/raif/llms/anthropic.rb +23 -28
  27. data/app/models/raif/llms/bedrock_claude.rb +33 -19
  28. data/app/models/raif/llms/open_ai.rb +14 -17
  29. data/app/models/raif/llms/open_router.rb +93 -0
  30. data/app/models/raif/model_completion.rb +21 -2
  31. data/app/models/raif/model_file_input.rb +113 -0
  32. data/app/models/raif/model_image_input.rb +4 -0
  33. data/app/models/raif/model_tool.rb +77 -51
  34. data/app/models/raif/model_tool_invocation.rb +8 -6
  35. data/app/models/raif/model_tools/agent_final_answer.rb +18 -27
  36. data/app/models/raif/model_tools/fetch_url.rb +27 -36
  37. data/app/models/raif/model_tools/wikipedia_search.rb +46 -55
  38. data/app/models/raif/task.rb +71 -16
  39. data/app/views/layouts/raif/admin.html.erb +10 -0
  40. data/app/views/raif/admin/agents/show.html.erb +3 -1
  41. data/app/views/raif/admin/conversations/_conversation.html.erb +1 -1
  42. data/app/views/raif/admin/conversations/show.html.erb +3 -1
  43. data/app/views/raif/admin/model_completions/_model_completion.html.erb +1 -0
  44. data/app/views/raif/admin/model_completions/index.html.erb +1 -0
  45. data/app/views/raif/admin/model_completions/show.html.erb +30 -3
  46. data/app/views/raif/admin/stats/index.html.erb +128 -0
  47. data/app/views/raif/admin/stats/tasks/index.html.erb +45 -0
  48. data/app/views/raif/admin/tasks/_task.html.erb +5 -4
  49. data/app/views/raif/admin/tasks/index.html.erb +20 -2
  50. data/app/views/raif/admin/tasks/show.html.erb +3 -1
  51. data/app/views/raif/conversation_entries/_conversation_entry.html.erb +18 -14
  52. data/app/views/raif/conversation_entries/_form.html.erb +1 -1
  53. data/app/views/raif/conversation_entries/_form_with_available_tools.html.erb +4 -4
  54. data/app/views/raif/conversation_entries/_message.html.erb +10 -3
  55. data/config/locales/admin.en.yml +14 -0
  56. data/config/locales/en.yml +25 -3
  57. data/config/routes.rb +6 -0
  58. data/db/migrate/20250421202149_add_response_format_to_raif_conversations.rb +7 -0
  59. data/db/migrate/20250424200755_add_cost_columns_to_raif_model_completions.rb +14 -0
  60. data/db/migrate/20250424232946_add_created_at_indexes.rb +11 -0
  61. data/db/migrate/20250502155330_add_status_indexes_to_raif_tasks.rb +14 -0
  62. data/db/migrate/20250507155314_add_retry_count_to_raif_model_completions.rb +7 -0
  63. data/lib/generators/raif/agent/agent_generator.rb +22 -12
  64. data/lib/generators/raif/agent/templates/agent.rb.tt +3 -3
  65. data/lib/generators/raif/agent/templates/application_agent.rb.tt +7 -0
  66. data/lib/generators/raif/conversation/conversation_generator.rb +10 -0
  67. data/lib/generators/raif/conversation/templates/application_conversation.rb.tt +7 -0
  68. data/lib/generators/raif/conversation/templates/conversation.rb.tt +13 -11
  69. data/lib/generators/raif/install/templates/initializer.rb +50 -6
  70. data/lib/generators/raif/model_tool/model_tool_generator.rb +0 -5
  71. data/lib/generators/raif/model_tool/templates/model_tool.rb.tt +69 -56
  72. data/lib/generators/raif/task/templates/task.rb.tt +34 -23
  73. data/lib/raif/configuration.rb +40 -3
  74. data/lib/raif/embedding_model_registry.rb +83 -0
  75. data/lib/raif/engine.rb +34 -1
  76. data/lib/raif/errors/{open_ai/api_error.rb → invalid_model_file_input_error.rb} +1 -3
  77. data/lib/raif/errors/{anthropic/api_error.rb → invalid_model_image_input_error.rb} +1 -3
  78. data/lib/raif/errors/unsupported_feature_error.rb +8 -0
  79. data/lib/raif/errors.rb +3 -2
  80. data/lib/raif/json_schema_builder.rb +104 -0
  81. data/lib/raif/llm_registry.rb +205 -0
  82. data/lib/raif/version.rb +1 -1
  83. data/lib/raif.rb +5 -32
  84. data/lib/tasks/raif_tasks.rake +9 -4
  85. metadata +32 -19
  86. data/lib/raif/default_llms.rb +0 -37
@@ -0,0 +1,205 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Raif
4
+ class << self
5
+ attr_accessor :llm_registry
6
+ end
7
+
8
+ def self.register_llm(llm_class, llm_config)
9
+ llm = llm_class.new(**llm_config)
10
+
11
+ unless llm.valid?
12
+ raise ArgumentError, "The LLM you tried to register is invalid: #{llm.errors.full_messages.join(", ")}"
13
+ end
14
+
15
+ @llm_registry ||= {}
16
+ @llm_registry[llm.key] = llm_config.merge(llm_class: llm_class)
17
+ end
18
+
19
+ def self.llm(model_key)
20
+ llm_config = llm_registry[model_key]
21
+
22
+ if llm_config.nil?
23
+ raise ArgumentError, "No LLM found for model key: #{model_key}. Available models: #{available_llm_keys.join(", ")}"
24
+ end
25
+
26
+ llm_class = llm_config[:llm_class]
27
+ llm_class.new(**llm_config.except(:llm_class))
28
+ end
29
+
30
+ def self.available_llms
31
+ llm_registry.values
32
+ end
33
+
34
+ def self.available_llm_keys
35
+ llm_registry.keys
36
+ end
37
+
38
+ def self.llm_config(model_key)
39
+ llm_registry[model_key]
40
+ end
41
+
42
+ def self.default_llms
43
+ {
44
+ Raif::Llms::OpenAi => [
45
+ {
46
+ key: :open_ai_gpt_4o_mini,
47
+ api_name: "gpt-4o-mini",
48
+ input_token_cost: 0.15 / 1_000_000,
49
+ output_token_cost: 0.6 / 1_000_000,
50
+ },
51
+ {
52
+ key: :open_ai_gpt_4o,
53
+ api_name: "gpt-4o",
54
+ input_token_cost: 2.5 / 1_000_000,
55
+ output_token_cost: 10.0 / 1_000_000,
56
+ },
57
+ {
58
+ key: :open_ai_gpt_3_5_turbo,
59
+ api_name: "gpt-3.5-turbo",
60
+ input_token_cost: 0.5 / 1_000_000,
61
+ output_token_cost: 1.5 / 1_000_000,
62
+ model_provider_settings: { supports_structured_outputs: false }
63
+ },
64
+ {
65
+ key: :open_ai_gpt_4_1,
66
+ api_name: "gpt-4.1",
67
+ input_token_cost: 2.0 / 1_000_000,
68
+ output_token_cost: 8.0 / 1_000_000,
69
+ },
70
+ {
71
+ key: :open_ai_gpt_4_1_mini,
72
+ api_name: "gpt-4.1-mini",
73
+ input_token_cost: 0.4 / 1_000_000,
74
+ output_token_cost: 1.6 / 1_000_000,
75
+ },
76
+ {
77
+ key: :open_ai_gpt_4_1_nano,
78
+ api_name: "gpt-4.1-nano",
79
+ input_token_cost: 0.1 / 1_000_000,
80
+ output_token_cost: 0.4 / 1_000_000,
81
+ },
82
+ ],
83
+ Raif::Llms::Anthropic => [
84
+ {
85
+ key: :anthropic_claude_4_sonnet,
86
+ api_name: "claude-sonnet-4-20250514",
87
+ input_token_cost: 3.0 / 1_000_000,
88
+ output_token_cost: 15.0 / 1_000_000,
89
+ max_completion_tokens: 8192
90
+ },
91
+ {
92
+ key: :anthropic_claude_4_opus,
93
+ api_name: "claude-opus-4-20250514",
94
+ input_token_cost: 15.0 / 1_000_000,
95
+ output_token_cost: 75.0 / 1_000_000,
96
+ max_completion_tokens: 8192
97
+ },
98
+ {
99
+ key: :anthropic_claude_3_7_sonnet,
100
+ api_name: "claude-3-7-sonnet-latest",
101
+ input_token_cost: 3.0 / 1_000_000,
102
+ output_token_cost: 15.0 / 1_000_000,
103
+ max_completion_tokens: 8192
104
+ },
105
+ {
106
+ key: :anthropic_claude_3_5_sonnet,
107
+ api_name: "claude-3-5-sonnet-latest",
108
+ input_token_cost: 3.0 / 1_000_000,
109
+ output_token_cost: 15.0 / 1_000_000,
110
+ max_completion_tokens: 8192
111
+ },
112
+ {
113
+ key: :anthropic_claude_3_5_haiku,
114
+ api_name: "claude-3-5-haiku-latest",
115
+ input_token_cost: 0.8 / 1_000_000,
116
+ output_token_cost: 4.0 / 1_000_000,
117
+ max_completion_tokens: 8192
118
+ },
119
+ {
120
+ key: :anthropic_claude_3_opus,
121
+ api_name: "claude-3-opus-latest",
122
+ input_token_cost: 15.0 / 1_000_000,
123
+ output_token_cost: 75.0 / 1_000_000,
124
+ max_completion_tokens: 4096
125
+ },
126
+ ],
127
+ Raif::Llms::BedrockClaude => [
128
+ {
129
+ key: :bedrock_claude_4_sonnet,
130
+ api_name: "anthropic.claude-sonnet-4-20250514-v1:0",
131
+ input_token_cost: 0.003 / 1000,
132
+ output_token_cost: 0.015 / 1000,
133
+ max_completion_tokens: 8192
134
+ },
135
+ {
136
+ key: :bedrock_claude_4_opus,
137
+ api_name: "anthropic.claude-opus-4-20250514-v1:0",
138
+ input_token_cost: 0.015 / 1000,
139
+ output_token_cost: 0.075 / 1000,
140
+ max_completion_tokens: 8192
141
+ },
142
+ {
143
+ key: :bedrock_claude_3_5_sonnet,
144
+ api_name: "anthropic.claude-3-5-sonnet-20241022-v2:0",
145
+ input_token_cost: 0.003 / 1000,
146
+ output_token_cost: 0.015 / 1000,
147
+ max_completion_tokens: 8192
148
+ },
149
+ {
150
+ key: :bedrock_claude_3_7_sonnet,
151
+ api_name: "anthropic.claude-3-7-sonnet-20250219-v1:0",
152
+ input_token_cost: 0.003 / 1000,
153
+ output_token_cost: 0.015 / 1000,
154
+ max_completion_tokens: 8192
155
+ },
156
+ {
157
+ key: :bedrock_claude_3_5_haiku,
158
+ api_name: "anthropic.claude-3-5-haiku-20241022-v1:0",
159
+ input_token_cost: 0.0008 / 1000,
160
+ output_token_cost: 0.004 / 1000,
161
+ max_completion_tokens: 8192
162
+ },
163
+ {
164
+ key: :bedrock_claude_3_opus,
165
+ api_name: "anthropic.claude-3-opus-20240229-v1:0",
166
+ input_token_cost: 0.015 / 1000,
167
+ output_token_cost: 0.075 / 1000,
168
+ max_completion_tokens: 4096
169
+ },
170
+ ],
171
+ Raif::Llms::OpenRouter => [
172
+ {
173
+ key: :open_router_claude_3_7_sonnet,
174
+ api_name: "anthropic/claude-3.7-sonnet",
175
+ input_token_cost: 3.0 / 1_000_000,
176
+ output_token_cost: 15.0 / 1_000_000,
177
+ },
178
+ {
179
+ key: :open_router_llama_3_3_70b_instruct,
180
+ api_name: "meta-llama/llama-3.3-70b-instruct",
181
+ input_token_cost: 0.10 / 1_000_000,
182
+ output_token_cost: 0.25 / 1_000_000,
183
+ },
184
+ {
185
+ key: :open_router_llama_3_1_8b_instruct,
186
+ api_name: "meta-llama/llama-3.1-8b-instruct",
187
+ input_token_cost: 0.02 / 1_000_000,
188
+ output_token_cost: 0.03 / 1_000_000,
189
+ },
190
+ {
191
+ key: :open_router_gemini_2_0_flash,
192
+ api_name: "google/gemini-2.0-flash-001",
193
+ input_token_cost: 0.1 / 1_000_000,
194
+ output_token_cost: 0.4 / 1_000_000,
195
+ },
196
+ {
197
+ key: :open_router_deepseek_chat_v3,
198
+ api_name: "deepseek/deepseek-chat-v3-0324",
199
+ input_token_cost: 0.27 / 1_000_000,
200
+ output_token_cost: 1.1 / 1_000_000,
201
+ },
202
+ ]
203
+ }
204
+ end
205
+ end
data/lib/raif/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Raif
4
- VERSION = "1.0.0"
4
+ VERSION = "1.1.0"
5
5
  end
data/lib/raif.rb CHANGED
@@ -6,8 +6,12 @@ require "raif/engine"
6
6
  require "raif/configuration"
7
7
  require "raif/errors"
8
8
  require "raif/utils"
9
- require "raif/default_llms"
9
+ require "raif/llm_registry"
10
+ require "raif/embedding_model_registry"
11
+ require "raif/json_schema_builder"
12
+
10
13
  require "faraday"
14
+ require "json-schema"
11
15
  require "loofah"
12
16
  require "pagy"
13
17
  require "reverse_markdown"
@@ -16,7 +20,6 @@ require "turbo-rails"
16
20
  module Raif
17
21
  class << self
18
22
  attr_accessor :configuration
19
- attr_accessor :llm_registry
20
23
 
21
24
  attr_writer :logger
22
25
  end
@@ -32,34 +35,4 @@ module Raif
32
35
  def self.logger
33
36
  @logger ||= Rails.logger
34
37
  end
35
-
36
- def self.register_llm(llm_class, llm_config)
37
- llm = llm_class.new(**llm_config)
38
-
39
- unless llm.valid?
40
- raise ArgumentError, "The LLM you tried to register is invalid: #{llm.errors.full_messages.join(", ")}"
41
- end
42
-
43
- @llm_registry ||= {}
44
- @llm_registry[llm.key] = llm_config.merge(llm_class: llm_class)
45
- end
46
-
47
- def self.llm(model_key)
48
- llm_config = llm_registry[model_key]
49
-
50
- if llm_config.nil?
51
- raise ArgumentError, "No LLM found for model key: #{model_key}. Available models: #{available_llm_keys.join(", ")}"
52
- end
53
-
54
- llm_class = llm_config[:llm_class]
55
- llm_class.new(**llm_config.except(:llm_class))
56
- end
57
-
58
- def self.available_llms
59
- llm_registry.values
60
- end
61
-
62
- def self.available_llm_keys
63
- llm_registry.keys
64
- end
65
38
  end
@@ -1,6 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # desc "Explaining what the task does"
4
- # task :raif do
5
- # # Task goes here
6
- # end
3
+ namespace :raif do
4
+ namespace :install do
5
+ desc "Copy migrations from Raif to host application"
6
+ task :migrations do
7
+ ENV["FROM"] = "raif"
8
+ Rake::Task["railties:install:migrations"].invoke
9
+ end
10
+ end
11
+ end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raif
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Roesch
8
8
  - Brian Leslie
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-02 00:00:00.000000000 Z
11
+ date: 2025-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: aws-sdk-bedrock
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: aws-sdk-bedrockruntime
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -157,6 +143,7 @@ files:
157
143
  - app/assets/javascript/raif/stream_actions/raif_scroll_to_bottom.js
158
144
  - app/assets/stylesheets/raif.scss
159
145
  - app/assets/stylesheets/raif/admin/conversation.scss
146
+ - app/assets/stylesheets/raif/admin/stats.scss
160
147
  - app/assets/stylesheets/raif/loader.scss
161
148
  - app/assets/stylesheets/raif_admin.scss
162
149
  - app/controllers/raif/admin/agents_controller.rb
@@ -164,6 +151,8 @@ files:
164
151
  - app/controllers/raif/admin/conversations_controller.rb
165
152
  - app/controllers/raif/admin/model_completions_controller.rb
166
153
  - app/controllers/raif/admin/model_tool_invocations_controller.rb
154
+ - app/controllers/raif/admin/stats/tasks_controller.rb
155
+ - app/controllers/raif/admin/stats_controller.rb
167
156
  - app/controllers/raif/admin/tasks_controller.rb
168
157
  - app/controllers/raif/application_controller.rb
169
158
  - app/controllers/raif/conversation_entries_controller.rb
@@ -182,14 +171,26 @@ files:
182
171
  - app/models/raif/concerns/has_llm.rb
183
172
  - app/models/raif/concerns/has_requested_language.rb
184
173
  - app/models/raif/concerns/invokes_model_tools.rb
174
+ - app/models/raif/concerns/json_schema_definition.rb
185
175
  - app/models/raif/concerns/llm_response_parsing.rb
176
+ - app/models/raif/concerns/llm_temperature.rb
177
+ - app/models/raif/concerns/llms/anthropic/message_formatting.rb
178
+ - app/models/raif/concerns/llms/bedrock_claude/message_formatting.rb
179
+ - app/models/raif/concerns/llms/message_formatting.rb
180
+ - app/models/raif/concerns/llms/open_ai/message_formatting.rb
186
181
  - app/models/raif/conversation.rb
187
182
  - app/models/raif/conversation_entry.rb
183
+ - app/models/raif/embedding_model.rb
184
+ - app/models/raif/embedding_models/bedrock_titan.rb
185
+ - app/models/raif/embedding_models/open_ai.rb
188
186
  - app/models/raif/llm.rb
189
187
  - app/models/raif/llms/anthropic.rb
190
188
  - app/models/raif/llms/bedrock_claude.rb
191
189
  - app/models/raif/llms/open_ai.rb
190
+ - app/models/raif/llms/open_router.rb
192
191
  - app/models/raif/model_completion.rb
192
+ - app/models/raif/model_file_input.rb
193
+ - app/models/raif/model_image_input.rb
193
194
  - app/models/raif/model_tool.rb
194
195
  - app/models/raif/model_tool_invocation.rb
195
196
  - app/models/raif/model_tools/agent_final_answer.rb
@@ -212,6 +213,8 @@ files:
212
213
  - app/views/raif/admin/model_tool_invocations/_model_tool_invocation.html.erb
213
214
  - app/views/raif/admin/model_tool_invocations/index.html.erb
214
215
  - app/views/raif/admin/model_tool_invocations/show.html.erb
216
+ - app/views/raif/admin/stats/index.html.erb
217
+ - app/views/raif/admin/stats/tasks/index.html.erb
215
218
  - app/views/raif/admin/tasks/_task.html.erb
216
219
  - app/views/raif/admin/tasks/index.html.erb
217
220
  - app/views/raif/admin/tasks/show.html.erb
@@ -234,9 +237,16 @@ files:
234
237
  - config/locales/en.yml
235
238
  - config/routes.rb
236
239
  - db/migrate/20250224234252_create_raif_tables.rb
240
+ - db/migrate/20250421202149_add_response_format_to_raif_conversations.rb
241
+ - db/migrate/20250424200755_add_cost_columns_to_raif_model_completions.rb
242
+ - db/migrate/20250424232946_add_created_at_indexes.rb
243
+ - db/migrate/20250502155330_add_status_indexes_to_raif_tasks.rb
244
+ - db/migrate/20250507155314_add_retry_count_to_raif_model_completions.rb
237
245
  - lib/generators/raif/agent/agent_generator.rb
238
246
  - lib/generators/raif/agent/templates/agent.rb.tt
247
+ - lib/generators/raif/agent/templates/application_agent.rb.tt
239
248
  - lib/generators/raif/conversation/conversation_generator.rb
249
+ - lib/generators/raif/conversation/templates/application_conversation.rb.tt
240
250
  - lib/generators/raif/conversation/templates/conversation.rb.tt
241
251
  - lib/generators/raif/install/install_generator.rb
242
252
  - lib/generators/raif/install/templates/initializer.rb
@@ -248,17 +258,20 @@ files:
248
258
  - lib/generators/raif/views_generator.rb
249
259
  - lib/raif.rb
250
260
  - lib/raif/configuration.rb
251
- - lib/raif/default_llms.rb
261
+ - lib/raif/embedding_model_registry.rb
252
262
  - lib/raif/engine.rb
253
263
  - lib/raif/errors.rb
254
264
  - lib/raif/errors/action_not_authorized_error.rb
255
- - lib/raif/errors/anthropic/api_error.rb
256
265
  - lib/raif/errors/invalid_config_error.rb
257
266
  - lib/raif/errors/invalid_conversation_type_error.rb
267
+ - lib/raif/errors/invalid_model_file_input_error.rb
268
+ - lib/raif/errors/invalid_model_image_input_error.rb
258
269
  - lib/raif/errors/invalid_user_tool_type_error.rb
259
- - lib/raif/errors/open_ai/api_error.rb
260
270
  - lib/raif/errors/open_ai/json_schema_error.rb
271
+ - lib/raif/errors/unsupported_feature_error.rb
272
+ - lib/raif/json_schema_builder.rb
261
273
  - lib/raif/languages.rb
274
+ - lib/raif/llm_registry.rb
262
275
  - lib/raif/rspec.rb
263
276
  - lib/raif/utils.rb
264
277
  - lib/raif/utils/html_to_markdown_converter.rb
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Raif
4
- def self.default_llms
5
- {
6
- Raif::Llms::OpenAi => [
7
- {
8
- key: :open_ai_gpt_4o_mini,
9
- api_name: "gpt-4o-mini",
10
- model_provider_settings: { supports_structured_outputs: true }
11
- },
12
- {
13
- key: :open_ai_gpt_4o,
14
- api_name: "gpt-4o",
15
- model_provider_settings: { supports_structured_outputs: true }
16
- },
17
- {
18
- key: :open_ai_gpt_3_5_turbo,
19
- api_name: "gpt-3.5-turbo",
20
- model_provider_settings: { supports_structured_outputs: false }
21
- },
22
- ],
23
- Raif::Llms::Anthropic => [
24
- { key: :anthropic_claude_3_7_sonnet, api_name: "claude-3-7-sonnet-latest", max_completion_tokens: 8192 },
25
- { key: :anthropic_claude_3_5_sonnet, api_name: "claude-3-5-sonnet-latest", max_completion_tokens: 8192 },
26
- { key: :anthropic_claude_3_5_haiku, api_name: "claude-3-5-haiku-latest", max_completion_tokens: 8192 },
27
- { key: :anthropic_claude_3_opus, api_name: "claude-3-opus-latest", max_completion_tokens: 4096 },
28
- ],
29
- Raif::Llms::BedrockClaude => [
30
- { key: :bedrock_claude_3_5_sonnet, api_name: "anthropic.claude-3-5-sonnet-20241022-v2:0", max_completion_tokens: 8192 },
31
- { key: :bedrock_claude_3_7_sonnet, api_name: "anthropic.claude-3-7-sonnet-20250219-v1:0", max_completion_tokens: 8192 },
32
- { key: :bedrock_claude_3_5_haiku, api_name: "anthropic.claude-3-5-haiku-20241022-v1:0", max_completion_tokens: 8192 },
33
- { key: :bedrock_claude_3_opus, api_name: "anthropic.claude-3-opus-20240229-v1:0", max_completion_tokens: 4096 },
34
- ]
35
- }
36
- end
37
- end