ruby_llm 1.16.0 → 2.0.0.rc2

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 (475) hide show
  1. checksums.yaml +4 -4
  2. data/.rdoc_options +25 -0
  3. data/README.md +85 -32
  4. data/exe/ruby_llm +8 -0
  5. data/lib/generators/ruby_llm/agent/templates/agent.rb.tt +0 -1
  6. data/lib/generators/ruby_llm/chat_ui/chat_ui_generator.rb +3 -43
  7. data/lib/generators/ruby_llm/chat_ui/templates/controllers/chats_controller.rb.tt +11 -3
  8. data/lib/generators/ruby_llm/chat_ui/templates/controllers/messages_controller.rb.tt +8 -0
  9. data/lib/generators/ruby_llm/chat_ui/templates/controllers/models_controller.rb.tt +4 -4
  10. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/_chat.html.erb.tt +1 -1
  11. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/_form.html.erb.tt +1 -1
  12. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/index.html.erb.tt +1 -1
  13. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/chats/show.html.erb.tt +2 -2
  14. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_assistant.html.erb.tt +1 -1
  15. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_system.html.erb.tt +1 -1
  16. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_tool.html.erb.tt +1 -1
  17. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_tool_calls.html.erb.tt +6 -4
  18. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/_user.html.erb.tt +1 -1
  19. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/messages/tool_calls/_default.html.erb.tt +2 -2
  20. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/models/_model.html.erb.tt +5 -6
  21. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/models/index.html.erb.tt +2 -2
  22. data/lib/generators/ruby_llm/chat_ui/templates/tailwind/views/models/show.html.erb.tt +5 -5
  23. data/lib/generators/ruby_llm/chat_ui/templates/views/chats/_chat.html.erb.tt +1 -1
  24. data/lib/generators/ruby_llm/chat_ui/templates/views/chats/_form.html.erb.tt +1 -1
  25. data/lib/generators/ruby_llm/chat_ui/templates/views/chats/index.html.erb.tt +1 -1
  26. data/lib/generators/ruby_llm/chat_ui/templates/views/chats/show.html.erb.tt +2 -2
  27. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_assistant.html.erb.tt +1 -1
  28. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_system.html.erb.tt +1 -1
  29. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_tool.html.erb.tt +1 -1
  30. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_tool_calls.html.erb.tt +6 -4
  31. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/_user.html.erb.tt +1 -1
  32. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/create.turbo_stream.erb.tt +4 -6
  33. data/lib/generators/ruby_llm/chat_ui/templates/views/messages/tool_calls/_default.html.erb.tt +2 -2
  34. data/lib/generators/ruby_llm/chat_ui/templates/views/models/_model.html.erb.tt +5 -6
  35. data/lib/generators/ruby_llm/chat_ui/templates/views/models/index.html.erb.tt +2 -2
  36. data/lib/generators/ruby_llm/chat_ui/templates/views/models/show.html.erb.tt +3 -3
  37. data/lib/generators/ruby_llm/generator_helpers.rb +106 -62
  38. data/lib/generators/ruby_llm/install/install_generator.rb +3 -11
  39. data/lib/generators/ruby_llm/install/templates/create_chats_migration.rb.tt +2 -0
  40. data/lib/generators/ruby_llm/install/templates/create_messages_migration.rb.tt +14 -8
  41. data/lib/generators/ruby_llm/install/templates/create_ruby_llm_records_migration.rb.tt +117 -0
  42. data/lib/generators/ruby_llm/install/templates/initializer.rb.tt +0 -8
  43. data/lib/generators/ruby_llm/provider/cli.rb +175 -0
  44. data/lib/generators/ruby_llm/provider/scaffold.rb +323 -0
  45. data/lib/generators/ruby_llm/provider/templates/core/provider.rb.erb +37 -0
  46. data/lib/generators/ruby_llm/provider/templates/core/provider_spec.rb.erb +34 -0
  47. data/lib/generators/ruby_llm/provider/templates/gem/archspec.rb.erb +14 -0
  48. data/lib/generators/ruby_llm/provider/templates/gem/bin/console.erb +15 -0
  49. data/lib/generators/ruby_llm/provider/templates/gem/bin/setup.erb +5 -0
  50. data/lib/generators/ruby_llm/provider/templates/gem/chat_schema_spec.rb.erb +30 -0
  51. data/lib/generators/ruby_llm/provider/templates/gem/chat_spec.rb.erb +35 -0
  52. data/lib/generators/ruby_llm/provider/templates/gem/chat_streaming_spec.rb.erb +22 -0
  53. data/lib/generators/ruby_llm/provider/templates/gem/chat_tools_spec.rb.erb +30 -0
  54. data/lib/generators/ruby_llm/provider/templates/gem/ci.yml.erb +32 -0
  55. data/lib/generators/ruby_llm/provider/templates/gem/embedding_spec.rb.erb +49 -0
  56. data/lib/generators/ruby_llm/provider/templates/gem/env.erb +2 -0
  57. data/lib/generators/ruby_llm/provider/templates/gem/fixtures_gitkeep.erb +1 -0
  58. data/lib/generators/ruby_llm/provider/templates/gem/flayignore.erb +1 -0
  59. data/lib/generators/ruby_llm/provider/templates/gem/gemfile.erb +23 -0
  60. data/lib/generators/ruby_llm/provider/templates/gem/gemspec.erb +28 -0
  61. data/lib/generators/ruby_llm/provider/templates/gem/gitignore.erb +7 -0
  62. data/lib/generators/ruby_llm/provider/templates/gem/gitleaks.yml.erb +22 -0
  63. data/lib/generators/ruby_llm/provider/templates/gem/image_spec.rb.erb +23 -0
  64. data/lib/generators/ruby_llm/provider/templates/gem/license.erb +21 -0
  65. data/lib/generators/ruby_llm/provider/templates/gem/models.rb.erb +19 -0
  66. data/lib/generators/ruby_llm/provider/templates/gem/models_spec.rb.erb +17 -0
  67. data/lib/generators/ruby_llm/provider/templates/gem/moderation_spec.rb.erb +22 -0
  68. data/lib/generators/ruby_llm/provider/templates/gem/overcommit.yml.erb +31 -0
  69. data/lib/generators/ruby_llm/provider/templates/gem/provider.rb.erb +52 -0
  70. data/lib/generators/ruby_llm/provider/templates/gem/provider_spec.rb.erb +38 -0
  71. data/lib/generators/ruby_llm/provider/templates/gem/rakefile.erb +38 -0
  72. data/lib/generators/ruby_llm/provider/templates/gem/readme.md.erb +50 -0
  73. data/lib/generators/ruby_llm/provider/templates/gem/release.yml.erb +36 -0
  74. data/lib/generators/ruby_llm/provider/templates/gem/rerank_spec.rb.erb +23 -0
  75. data/lib/generators/ruby_llm/provider/templates/gem/rspec.erb +2 -0
  76. data/lib/generators/ruby_llm/provider/templates/gem/rubocop.yml.erb +29 -0
  77. data/lib/generators/ruby_llm/provider/templates/gem/rubyllm_configuration.rb.erb +14 -0
  78. data/lib/generators/ruby_llm/provider/templates/gem/spec_helper.rb.erb +26 -0
  79. data/lib/generators/ruby_llm/provider/templates/gem/speech_spec.rb.erb +25 -0
  80. data/lib/generators/ruby_llm/provider/templates/gem/vcr_configuration.rb.erb +16 -0
  81. data/lib/generators/ruby_llm/provider/templates/gem/video_spec.rb.erb +27 -0
  82. data/lib/generators/ruby_llm/schema/schema_generator.rb +5 -1
  83. data/lib/generators/ruby_llm/schema/templates/schema.rb.tt +1 -1
  84. data/lib/generators/ruby_llm/tool/templates/tailwind/tool_call.html.erb.tt +13 -0
  85. data/lib/generators/ruby_llm/tool/templates/tailwind/tool_result.html.erb.tt +21 -0
  86. data/lib/generators/ruby_llm/tool/templates/tool.rb.tt +3 -3
  87. data/lib/generators/ruby_llm/tool/templates/tool_call.html.erb.tt +7 -12
  88. data/lib/generators/ruby_llm/tool/templates/tool_result.html.erb.tt +5 -2
  89. data/lib/generators/ruby_llm/tool/tool_generator.rb +25 -59
  90. data/lib/generators/ruby_llm/upgrade/templates/backfill_v2_data.rb.tt +461 -0
  91. data/lib/generators/ruby_llm/upgrade/templates/cleanup_v2_upgrade.rb.tt +101 -0
  92. data/lib/generators/ruby_llm/upgrade/templates/finish_v2_upgrade.rb.tt +215 -0
  93. data/lib/generators/ruby_llm/upgrade/templates/prepare_v2_upgrade.rb.tt +660 -0
  94. data/lib/generators/ruby_llm/upgrade/templates/ruby_llm_upgrade.rb.tt +222 -0
  95. data/lib/generators/ruby_llm/upgrade/templates/upgrade_initializer.rb.tt +13 -0
  96. data/lib/generators/ruby_llm/upgrade/upgrade_generator.rb +167 -0
  97. data/lib/generators/ruby_llm/upgrade/upgrade_migration.rb +344 -0
  98. data/lib/ruby_llm/accounting/usage.rb +245 -0
  99. data/lib/ruby_llm/active_record/acts_as.rb +94 -111
  100. data/lib/ruby_llm/active_record/attachment_helpers.rb +186 -0
  101. data/lib/ruby_llm/active_record/batch.rb +97 -0
  102. data/lib/ruby_llm/active_record/chat_methods.rb +828 -305
  103. data/lib/ruby_llm/active_record/message_methods.rb +113 -136
  104. data/lib/ruby_llm/active_record/model.rb +135 -0
  105. data/lib/ruby_llm/active_record/payload_helpers.rb +1 -2
  106. data/lib/ruby_llm/active_record/tool_call.rb +33 -0
  107. data/lib/ruby_llm/active_record/usage.rb +61 -0
  108. data/lib/ruby_llm/agent.rb +1065 -151
  109. data/lib/ruby_llm/aliases.json +268 -100
  110. data/lib/ruby_llm/attachment.rb +187 -48
  111. data/lib/ruby_llm/batch.rb +432 -0
  112. data/lib/ruby_llm/cached_content.rb +112 -0
  113. data/lib/ruby_llm/chat/tool_concurrency.rb +111 -0
  114. data/lib/ruby_llm/chat.rb +1127 -198
  115. data/lib/ruby_llm/chunk.rb +10 -0
  116. data/lib/ruby_llm/citation.rb +105 -0
  117. data/lib/ruby_llm/configuration.rb +261 -24
  118. data/lib/ruby_llm/context.rb +128 -6
  119. data/lib/ruby_llm/cost.rb +217 -80
  120. data/lib/ruby_llm/downloaded_file.rb +33 -0
  121. data/lib/ruby_llm/embedding.rb +121 -17
  122. data/lib/ruby_llm/embedding_request.rb +53 -0
  123. data/lib/ruby_llm/error.rb +159 -23
  124. data/lib/ruby_llm/fallback.rb +133 -0
  125. data/lib/ruby_llm/files/mime_type.rb +97 -0
  126. data/lib/ruby_llm/image.rb +153 -32
  127. data/lib/ruby_llm/message.rb +233 -54
  128. data/lib/ruby_llm/model/modalities.rb +17 -4
  129. data/lib/ruby_llm/model/pricing.rb +24 -5
  130. data/lib/ruby_llm/model/pricing_category.rb +103 -14
  131. data/lib/ruby_llm/model/pricing_tier.rb +55 -15
  132. data/lib/ruby_llm/model.rb +244 -2
  133. data/lib/ruby_llm/models/aliases.rb +41 -0
  134. data/lib/ruby_llm/models/registry.rb +165 -0
  135. data/lib/ruby_llm/models/schema.rb +99 -0
  136. data/lib/ruby_llm/models.json +73261 -33733
  137. data/lib/ruby_llm/models.rb +477 -215
  138. data/lib/ruby_llm/moderation.rb +139 -26
  139. data/lib/ruby_llm/ocr.rb +112 -0
  140. data/lib/ruby_llm/prompt.rb +79 -0
  141. data/lib/ruby_llm/protocol/binary_streaming.rb +65 -0
  142. data/lib/ruby_llm/protocol/stream_accumulator.rb +214 -0
  143. data/lib/ruby_llm/protocol/streaming.rb +230 -0
  144. data/lib/ruby_llm/protocol.rb +662 -0
  145. data/lib/ruby_llm/protocols/anthropic/batches.rb +73 -0
  146. data/lib/ruby_llm/protocols/anthropic/chat.rb +548 -0
  147. data/lib/ruby_llm/protocols/anthropic/embeddings.rb +14 -0
  148. data/lib/ruby_llm/protocols/anthropic/files.rb +38 -0
  149. data/lib/ruby_llm/protocols/anthropic/media.rb +141 -0
  150. data/lib/ruby_llm/protocols/anthropic/models.rb +129 -0
  151. data/lib/ruby_llm/protocols/anthropic/streaming.rb +167 -0
  152. data/lib/ruby_llm/{providers → protocols}/anthropic/tools.rb +24 -41
  153. data/lib/ruby_llm/protocols/anthropic.rb +101 -0
  154. data/lib/ruby_llm/protocols/azure/files.rb +16 -0
  155. data/lib/ruby_llm/protocols/bedrock/async_videos.rb +109 -0
  156. data/lib/ruby_llm/protocols/bedrock/batches.rb +129 -0
  157. data/lib/ruby_llm/protocols/bedrock/files.rb +110 -0
  158. data/lib/ruby_llm/protocols/bedrock/guardrails.rb +122 -0
  159. data/lib/ruby_llm/protocols/bedrock/rerank.rb +95 -0
  160. data/lib/ruby_llm/protocols/chat_completions/batches.rb +32 -0
  161. data/lib/ruby_llm/protocols/chat_completions/chat.rb +493 -0
  162. data/lib/ruby_llm/protocols/chat_completions/embedding_batches.rb +35 -0
  163. data/lib/ruby_llm/protocols/chat_completions/embeddings.rb +60 -0
  164. data/lib/ruby_llm/protocols/chat_completions/images.rb +127 -0
  165. data/lib/ruby_llm/{providers/openai → protocols/chat_completions}/media.rb +30 -17
  166. data/lib/ruby_llm/protocols/chat_completions/models.rb +39 -0
  167. data/lib/ruby_llm/protocols/chat_completions/moderation.rb +52 -0
  168. data/lib/ruby_llm/protocols/chat_completions/rerank.rb +56 -0
  169. data/lib/ruby_llm/protocols/chat_completions/speech.rb +40 -0
  170. data/lib/ruby_llm/protocols/chat_completions/streaming.rb +69 -0
  171. data/lib/ruby_llm/{providers/openai → protocols/chat_completions}/tools.rb +15 -17
  172. data/lib/ruby_llm/protocols/chat_completions/transcription.rb +150 -0
  173. data/lib/ruby_llm/protocols/chat_completions.rb +21 -0
  174. data/lib/ruby_llm/protocols/cohere/batch_requests.rb +75 -0
  175. data/lib/ruby_llm/protocols/cohere/batches.rb +98 -0
  176. data/lib/ruby_llm/protocols/cohere/chat.rb +227 -0
  177. data/lib/ruby_llm/protocols/cohere/datasets.rb +102 -0
  178. data/lib/ruby_llm/protocols/cohere/embeddings.rb +68 -0
  179. data/lib/ruby_llm/protocols/cohere/media.rb +77 -0
  180. data/lib/ruby_llm/protocols/cohere/models.rb +92 -0
  181. data/lib/ruby_llm/protocols/cohere/ocr.rb +63 -0
  182. data/lib/ruby_llm/protocols/cohere/rerank.rb +52 -0
  183. data/lib/ruby_llm/protocols/cohere/streaming.rb +105 -0
  184. data/lib/ruby_llm/protocols/cohere/tokenization.rb +22 -0
  185. data/lib/ruby_llm/protocols/cohere/tools.rb +132 -0
  186. data/lib/ruby_llm/protocols/cohere/transcription.rb +41 -0
  187. data/lib/ruby_llm/protocols/cohere.rb +21 -0
  188. data/lib/ruby_llm/protocols/converse/batches.rb +55 -0
  189. data/lib/ruby_llm/protocols/converse/chat.rb +695 -0
  190. data/lib/ruby_llm/protocols/converse/media.rb +178 -0
  191. data/lib/ruby_llm/protocols/converse/streaming.rb +432 -0
  192. data/lib/ruby_llm/protocols/converse/thinking_stream.rb +56 -0
  193. data/lib/ruby_llm/protocols/converse.rb +54 -0
  194. data/lib/ruby_llm/protocols/deepgram/models.rb +74 -0
  195. data/lib/ruby_llm/protocols/deepgram/speech.rb +93 -0
  196. data/lib/ruby_llm/protocols/deepgram/streaming_transcription.rb +89 -0
  197. data/lib/ruby_llm/protocols/deepgram/transcription.rb +96 -0
  198. data/lib/ruby_llm/protocols/deepgram.rb +19 -0
  199. data/lib/ruby_llm/protocols/deepseek/files.rb +31 -0
  200. data/lib/ruby_llm/protocols/elevenlabs/assets.rb +36 -0
  201. data/lib/ruby_llm/protocols/elevenlabs/flows/images.rb +74 -0
  202. data/lib/ruby_llm/protocols/elevenlabs/flows/media.rb +42 -0
  203. data/lib/ruby_llm/protocols/elevenlabs/flows/videos.rb +93 -0
  204. data/lib/ruby_llm/protocols/elevenlabs/flows.rb +14 -0
  205. data/lib/ruby_llm/protocols/elevenlabs/models.rb +64 -0
  206. data/lib/ruby_llm/protocols/elevenlabs/speech.rb +67 -0
  207. data/lib/ruby_llm/protocols/elevenlabs/streaming_transcription.rb +127 -0
  208. data/lib/ruby_llm/protocols/elevenlabs/transcription.rb +61 -0
  209. data/lib/ruby_llm/protocols/elevenlabs.rb +15 -0
  210. data/lib/ruby_llm/protocols/files.rb +119 -0
  211. data/lib/ruby_llm/protocols/gemini/batches.rb +162 -0
  212. data/lib/ruby_llm/protocols/gemini/caches.rb +59 -0
  213. data/lib/ruby_llm/protocols/gemini/chat.rb +453 -0
  214. data/lib/ruby_llm/protocols/gemini/embedding_batches.rb +86 -0
  215. data/lib/ruby_llm/protocols/gemini/embeddings.rb +70 -0
  216. data/lib/ruby_llm/protocols/gemini/file_transcription.rb +32 -0
  217. data/lib/ruby_llm/protocols/gemini/files.rb +115 -0
  218. data/lib/ruby_llm/protocols/gemini/images.rb +183 -0
  219. data/lib/ruby_llm/protocols/gemini/live_transcription.rb +140 -0
  220. data/lib/ruby_llm/{providers → protocols}/gemini/media.rb +17 -11
  221. data/lib/ruby_llm/protocols/gemini/models.rb +71 -0
  222. data/lib/ruby_llm/protocols/gemini/speech.rb +56 -0
  223. data/lib/ruby_llm/protocols/gemini/streaming.rb +96 -0
  224. data/lib/ruby_llm/protocols/gemini/tools.rb +157 -0
  225. data/lib/ruby_llm/{providers → protocols}/gemini/transcription.rb +22 -22
  226. data/lib/ruby_llm/protocols/gemini/videos.rb +103 -0
  227. data/lib/ruby_llm/protocols/gemini.rb +35 -0
  228. data/lib/ruby_llm/protocols/gpustack/responses.rb +111 -0
  229. data/lib/ruby_llm/protocols/gpustack/tokenization.rb +22 -0
  230. data/lib/ruby_llm/protocols/gpustack/videos.rb +96 -0
  231. data/lib/ruby_llm/protocols/interactions/chat.rb +145 -0
  232. data/lib/ruby_llm/protocols/interactions/content.rb +90 -0
  233. data/lib/ruby_llm/protocols/interactions/streaming.rb +91 -0
  234. data/lib/ruby_llm/protocols/interactions/tools.rb +51 -0
  235. data/lib/ruby_llm/protocols/interactions/transcription.rb +58 -0
  236. data/lib/ruby_llm/protocols/interactions.rb +29 -0
  237. data/lib/ruby_llm/protocols/invoke_model/cohere_embeddings.rb +51 -0
  238. data/lib/ruby_llm/protocols/invoke_model/embedding_batches.rb +111 -0
  239. data/lib/ruby_llm/protocols/invoke_model/nova_embeddings.rb +50 -0
  240. data/lib/ruby_llm/protocols/invoke_model/stability_images.rb +103 -0
  241. data/lib/ruby_llm/protocols/invoke_model/titan_multimodal_embeddings.rb +33 -0
  242. data/lib/ruby_llm/protocols/invoke_model/titan_text_embeddings.rb +44 -0
  243. data/lib/ruby_llm/protocols/invoke_model.rb +57 -0
  244. data/lib/ruby_llm/protocols/mistral/content.rb +49 -0
  245. data/lib/ruby_llm/protocols/mistral/conversations/chat.rb +160 -0
  246. data/lib/ruby_llm/protocols/mistral/conversations/images.rb +43 -0
  247. data/lib/ruby_llm/protocols/mistral/conversations/streaming.rb +83 -0
  248. data/lib/ruby_llm/protocols/mistral/conversations.rb +30 -0
  249. data/lib/ruby_llm/protocols/mistral/files.rb +36 -0
  250. data/lib/ruby_llm/protocols/mistral/multi_completion.rb +160 -0
  251. data/lib/ruby_llm/protocols/openai/batches.rb +126 -0
  252. data/lib/ruby_llm/protocols/openai/files.rb +42 -0
  253. data/lib/ruby_llm/protocols/openrouter/batches.rb +147 -0
  254. data/lib/ruby_llm/protocols/openrouter/files.rb +24 -0
  255. data/lib/ruby_llm/protocols/openrouter/responses.rb +53 -0
  256. data/lib/ruby_llm/protocols/openrouter/transcription.rb +51 -0
  257. data/lib/ruby_llm/protocols/perplexity/files.rb +48 -0
  258. data/lib/ruby_llm/protocols/perplexity/router.rb +59 -0
  259. data/lib/ruby_llm/protocols/responses/approvals.rb +32 -0
  260. data/lib/ruby_llm/protocols/responses/batches.rb +32 -0
  261. data/lib/ruby_llm/protocols/responses/chat.rb +476 -0
  262. data/lib/ruby_llm/protocols/responses/compaction.rb +29 -0
  263. data/lib/ruby_llm/protocols/responses/media.rb +61 -0
  264. data/lib/ruby_llm/protocols/responses/streaming.rb +117 -0
  265. data/lib/ruby_llm/protocols/responses/token_counting.rb +26 -0
  266. data/lib/ruby_llm/protocols/responses/tools.rb +39 -0
  267. data/lib/ruby_llm/protocols/responses.rb +35 -0
  268. data/lib/ruby_llm/protocols/vertexai/batch_prediction.rb +155 -0
  269. data/lib/ruby_llm/protocols/vertexai/embedding_prediction/requests.rb +85 -0
  270. data/lib/ruby_llm/protocols/vertexai/embedding_prediction/results.rb +74 -0
  271. data/lib/ruby_llm/protocols/vertexai/embedding_prediction.rb +56 -0
  272. data/lib/ruby_llm/protocols/vertexai/files.rb +101 -0
  273. data/lib/ruby_llm/protocols/vertexai/ranking.rb +69 -0
  274. data/lib/ruby_llm/protocols/vertexai/research.rb +193 -0
  275. data/lib/ruby_llm/protocols/xai/files.rb +30 -0
  276. data/lib/ruby_llm/protocols/xai/streaming_transcription.rb +120 -0
  277. data/lib/ruby_llm/protocols/xai/tokenization.rb +23 -0
  278. data/lib/ruby_llm/provider.rb +560 -128
  279. data/lib/ruby_llm/providers/anthropic/capabilities.rb +5 -7
  280. data/lib/ruby_llm/providers/anthropic.rb +4 -6
  281. data/lib/ruby_llm/providers/azure/audio.rb +18 -0
  282. data/lib/ruby_llm/providers/azure/capabilities.rb +16 -0
  283. data/lib/ruby_llm/providers/azure/chat.rb +2 -9
  284. data/lib/ruby_llm/providers/azure/chat_completions/batches.rb +29 -0
  285. data/lib/ruby_llm/providers/azure/chat_completions.rb +80 -0
  286. data/lib/ruby_llm/providers/azure/cohere.rb +33 -0
  287. data/lib/ruby_llm/providers/azure/embeddings.rb +3 -2
  288. data/lib/ruby_llm/providers/azure/images.rb +22 -0
  289. data/lib/ruby_llm/providers/azure/media.rb +5 -14
  290. data/lib/ruby_llm/providers/azure/models.rb +35 -0
  291. data/lib/ruby_llm/providers/azure/responses.rb +26 -0
  292. data/lib/ruby_llm/providers/azure/videos.rb +64 -0
  293. data/lib/ruby_llm/providers/azure.rb +77 -78
  294. data/lib/ruby_llm/providers/bedrock/auth.rb +60 -41
  295. data/lib/ruby_llm/providers/bedrock/capabilities.rb +18 -0
  296. data/lib/ruby_llm/providers/bedrock/mantle/anthropic.rb +39 -0
  297. data/lib/ruby_llm/providers/bedrock/mantle/chat_completions.rb +23 -0
  298. data/lib/ruby_llm/providers/bedrock/mantle/responses.rb +24 -0
  299. data/lib/ruby_llm/providers/bedrock/mantle/voxtral.rb +96 -0
  300. data/lib/ruby_llm/providers/bedrock/mantle.rb +57 -0
  301. data/lib/ruby_llm/providers/bedrock/models.rb +193 -41
  302. data/lib/ruby_llm/providers/bedrock.rb +216 -45
  303. data/lib/ruby_llm/providers/cohere.rb +31 -0
  304. data/lib/ruby_llm/providers/deepgram.rb +37 -0
  305. data/lib/ruby_llm/providers/deepseek/capabilities.rb +4 -51
  306. data/lib/ruby_llm/providers/deepseek/chat.rb +49 -2
  307. data/lib/ruby_llm/providers/deepseek/responses.rb +68 -0
  308. data/lib/ruby_llm/providers/deepseek.rb +9 -2
  309. data/lib/ruby_llm/providers/elevenlabs.rb +35 -0
  310. data/lib/ruby_llm/providers/gemini/capabilities.rb +8 -107
  311. data/lib/ruby_llm/providers/gemini.rb +15 -8
  312. data/lib/ruby_llm/providers/gpustack/chat.rb +2 -16
  313. data/lib/ruby_llm/providers/gpustack/embeddings.rb +28 -0
  314. data/lib/ruby_llm/providers/gpustack/media.rb +17 -16
  315. data/lib/ruby_llm/providers/gpustack/models.rb +72 -62
  316. data/lib/ruby_llm/providers/gpustack/speech.rb +15 -0
  317. data/lib/ruby_llm/providers/gpustack/transcription.rb +29 -0
  318. data/lib/ruby_llm/providers/gpustack.rb +35 -11
  319. data/lib/ruby_llm/providers/mistral/capabilities.rb +7 -155
  320. data/lib/ruby_llm/providers/mistral/chat.rb +37 -61
  321. data/lib/ruby_llm/providers/mistral/chat_completions/batches.rb +120 -0
  322. data/lib/ruby_llm/providers/mistral/chat_completions.rb +21 -0
  323. data/lib/ruby_llm/providers/mistral/conversations.rb +12 -0
  324. data/lib/ruby_llm/providers/mistral/embeddings.rb +6 -4
  325. data/lib/ruby_llm/providers/mistral/media.rb +6 -18
  326. data/lib/ruby_llm/providers/mistral/models.rb +57 -23
  327. data/lib/ruby_llm/providers/mistral/ocr.rb +47 -0
  328. data/lib/ruby_llm/providers/mistral/speech.rb +51 -0
  329. data/lib/ruby_llm/providers/mistral/transcription.rb +62 -0
  330. data/lib/ruby_llm/providers/mistral.rb +16 -4
  331. data/lib/ruby_llm/providers/ollama/chat.rb +7 -13
  332. data/lib/ruby_llm/providers/ollama/media.rb +6 -15
  333. data/lib/ruby_llm/providers/ollama/models.rb +50 -9
  334. data/lib/ruby_llm/providers/ollama.rb +9 -8
  335. data/lib/ruby_llm/providers/ollama_cloud/models.rb +14 -0
  336. data/lib/ruby_llm/providers/ollama_cloud.rb +40 -0
  337. data/lib/ruby_llm/providers/openai/capabilities.rb +54 -259
  338. data/lib/ruby_llm/providers/openai/models.rb +23 -23
  339. data/lib/ruby_llm/providers/openai/responses.rb +13 -0
  340. data/lib/ruby_llm/providers/openai.rb +92 -11
  341. data/lib/ruby_llm/providers/openrouter/chat.rb +130 -108
  342. data/lib/ruby_llm/providers/openrouter/embeddings.rb +51 -0
  343. data/lib/ruby_llm/providers/openrouter/images.rb +44 -43
  344. data/lib/ruby_llm/providers/openrouter/media.rb +34 -0
  345. data/lib/ruby_llm/providers/openrouter/models.rb +50 -11
  346. data/lib/ruby_llm/providers/openrouter/speech.rb +32 -0
  347. data/lib/ruby_llm/providers/openrouter/streaming.rb +31 -38
  348. data/lib/ruby_llm/providers/openrouter/videos.rb +81 -0
  349. data/lib/ruby_llm/providers/openrouter.rb +78 -20
  350. data/lib/ruby_llm/providers/perplexity/chat.rb +2 -9
  351. data/lib/ruby_llm/providers/perplexity/embeddings.rb +32 -0
  352. data/lib/ruby_llm/providers/perplexity/media.rb +5 -21
  353. data/lib/ruby_llm/providers/perplexity/models.rb +80 -13
  354. data/lib/ruby_llm/providers/perplexity.rb +28 -20
  355. data/lib/ruby_llm/providers/vertexai/anthropic/batches.rb +52 -0
  356. data/lib/ruby_llm/providers/vertexai/anthropic.rb +34 -0
  357. data/lib/ruby_llm/providers/vertexai/capabilities.rb +19 -0
  358. data/lib/ruby_llm/providers/vertexai/chat_completions/batches.rb +54 -0
  359. data/lib/ruby_llm/providers/vertexai/chat_completions.rb +15 -0
  360. data/lib/ruby_llm/providers/vertexai/embed_content.rb +42 -0
  361. data/lib/ruby_llm/providers/vertexai/embeddings.rb +22 -7
  362. data/lib/ruby_llm/providers/vertexai/gemini/batches.rb +42 -0
  363. data/lib/ruby_llm/providers/vertexai/gemini.rb +69 -0
  364. data/lib/ruby_llm/providers/vertexai/live_transcription.rb +24 -0
  365. data/lib/ruby_llm/providers/vertexai/mistral.rb +28 -0
  366. data/lib/ruby_llm/providers/vertexai/models.rb +145 -43
  367. data/lib/ruby_llm/providers/vertexai/transcription.rb +49 -4
  368. data/lib/ruby_llm/providers/vertexai/videos.rb +61 -0
  369. data/lib/ruby_llm/providers/vertexai.rb +160 -17
  370. data/lib/ruby_llm/providers/xai/capabilities.rb +18 -0
  371. data/lib/ruby_llm/providers/xai/chat.rb +3 -2
  372. data/lib/ruby_llm/providers/xai/chat_completions/batches.rb +108 -0
  373. data/lib/ruby_llm/providers/xai/chat_completions.rb +19 -0
  374. data/lib/ruby_llm/providers/xai/images.rb +91 -0
  375. data/lib/ruby_llm/providers/xai/models.rb +32 -36
  376. data/lib/ruby_llm/providers/xai/reported_cost.rb +18 -0
  377. data/lib/ruby_llm/providers/xai/responses.rb +52 -0
  378. data/lib/ruby_llm/providers/xai/speech.rb +45 -0
  379. data/lib/ruby_llm/providers/xai/transcription.rb +48 -0
  380. data/lib/ruby_llm/providers/xai/videos.rb +87 -0
  381. data/lib/ruby_llm/providers/xai.rb +15 -5
  382. data/lib/ruby_llm/railtie.rb +7 -16
  383. data/lib/ruby_llm/rerank.rb +105 -0
  384. data/lib/ruby_llm/research_job.rb +241 -0
  385. data/lib/ruby_llm/search_results.rb +68 -0
  386. data/lib/ruby_llm/server_tool_call.rb +73 -0
  387. data/lib/ruby_llm/speech.rb +159 -0
  388. data/lib/ruby_llm/speech_chunk.rb +33 -0
  389. data/lib/ruby_llm/support/deprecator.rb +22 -0
  390. data/lib/ruby_llm/support/inspectable.rb +49 -0
  391. data/lib/ruby_llm/support/instrumentation.rb +41 -0
  392. data/lib/ruby_llm/support/utils.rb +147 -0
  393. data/lib/ruby_llm/thinking.rb +127 -20
  394. data/lib/ruby_llm/tokenization.rb +59 -0
  395. data/lib/ruby_llm/tokens.rb +103 -33
  396. data/lib/ruby_llm/tool.rb +266 -91
  397. data/lib/ruby_llm/tool_call.rb +36 -3
  398. data/lib/ruby_llm/tools/server_tools.rb +109 -0
  399. data/lib/ruby_llm/transcription/wav_audio.rb +62 -0
  400. data/lib/ruby_llm/transcription.rb +138 -13
  401. data/lib/ruby_llm/transcription_chunk.rb +68 -0
  402. data/lib/ruby_llm/transport/connection.rb +193 -0
  403. data/lib/ruby_llm/transport/error_middleware.rb +131 -0
  404. data/lib/ruby_llm/transport/usage_middleware.rb +28 -0
  405. data/lib/ruby_llm/transport/websocket_connection.rb +220 -0
  406. data/lib/ruby_llm/uploaded_file.rb +144 -0
  407. data/lib/ruby_llm/version.rb +2 -1
  408. data/lib/ruby_llm/video.rb +136 -0
  409. data/lib/ruby_llm/video_job.rb +150 -0
  410. data/lib/ruby_llm/workflow.rb +91 -0
  411. data/lib/ruby_llm.rb +380 -6
  412. data/lib/tasks/ruby_llm.rake +21 -16
  413. data/skills/rubyllm/SKILL.md +81 -0
  414. data/skills/rubyllm/agents/openai.yaml +4 -0
  415. metadata +339 -97
  416. data/lib/generators/ruby_llm/install/templates/add_references_to_chats_tool_calls_and_messages_migration.rb.tt +0 -9
  417. data/lib/generators/ruby_llm/install/templates/create_models_migration.rb.tt +0 -39
  418. data/lib/generators/ruby_llm/install/templates/create_tool_calls_migration.rb.tt +0 -21
  419. data/lib/generators/ruby_llm/install/templates/model_model.rb.tt +0 -3
  420. data/lib/generators/ruby_llm/install/templates/tool_call_model.rb.tt +0 -3
  421. data/lib/generators/ruby_llm/upgrade_to_v1_10/templates/add_v1_10_message_columns.rb.tt +0 -19
  422. data/lib/generators/ruby_llm/upgrade_to_v1_10/upgrade_to_v1_10_generator.rb +0 -50
  423. data/lib/generators/ruby_llm/upgrade_to_v1_14/templates/add_v1_14_tool_call_columns.rb.tt +0 -7
  424. data/lib/generators/ruby_llm/upgrade_to_v1_14/upgrade_to_v1_14_generator.rb +0 -49
  425. data/lib/generators/ruby_llm/upgrade_to_v1_7/templates/migration.rb.tt +0 -145
  426. data/lib/generators/ruby_llm/upgrade_to_v1_7/upgrade_to_v1_7_generator.rb +0 -122
  427. data/lib/generators/ruby_llm/upgrade_to_v1_9/templates/add_v1_9_message_columns.rb.tt +0 -15
  428. data/lib/generators/ruby_llm/upgrade_to_v1_9/upgrade_to_v1_9_generator.rb +0 -49
  429. data/lib/ruby_llm/active_record/acts_as_legacy.rb +0 -597
  430. data/lib/ruby_llm/active_record/model_methods.rb +0 -82
  431. data/lib/ruby_llm/active_record/tool_call_methods.rb +0 -18
  432. data/lib/ruby_llm/aliases.rb +0 -41
  433. data/lib/ruby_llm/connection.rb +0 -159
  434. data/lib/ruby_llm/content.rb +0 -91
  435. data/lib/ruby_llm/deprecator.rb +0 -24
  436. data/lib/ruby_llm/error_middleware.rb +0 -81
  437. data/lib/ruby_llm/instrumentation.rb +0 -36
  438. data/lib/ruby_llm/mime_type.rb +0 -96
  439. data/lib/ruby_llm/model/info.rb +0 -164
  440. data/lib/ruby_llm/model_registry.rb +0 -39
  441. data/lib/ruby_llm/models_schema.json +0 -171
  442. data/lib/ruby_llm/providers/anthropic/chat.rb +0 -291
  443. data/lib/ruby_llm/providers/anthropic/content.rb +0 -44
  444. data/lib/ruby_llm/providers/anthropic/embeddings.rb +0 -20
  445. data/lib/ruby_llm/providers/anthropic/media.rb +0 -92
  446. data/lib/ruby_llm/providers/anthropic/models.rb +0 -59
  447. data/lib/ruby_llm/providers/anthropic/streaming.rb +0 -71
  448. data/lib/ruby_llm/providers/bedrock/chat.rb +0 -405
  449. data/lib/ruby_llm/providers/bedrock/media.rb +0 -108
  450. data/lib/ruby_llm/providers/bedrock/streaming.rb +0 -328
  451. data/lib/ruby_llm/providers/gemini/chat.rb +0 -542
  452. data/lib/ruby_llm/providers/gemini/embeddings.rb +0 -37
  453. data/lib/ruby_llm/providers/gemini/images.rb +0 -47
  454. data/lib/ruby_llm/providers/gemini/models.rb +0 -38
  455. data/lib/ruby_llm/providers/gemini/streaming.rb +0 -98
  456. data/lib/ruby_llm/providers/gemini/tools.rb +0 -234
  457. data/lib/ruby_llm/providers/gpustack/capabilities.rb +0 -20
  458. data/lib/ruby_llm/providers/ollama/capabilities.rb +0 -20
  459. data/lib/ruby_llm/providers/openai/chat.rb +0 -236
  460. data/lib/ruby_llm/providers/openai/embeddings.rb +0 -33
  461. data/lib/ruby_llm/providers/openai/images.rb +0 -90
  462. data/lib/ruby_llm/providers/openai/moderation.rb +0 -34
  463. data/lib/ruby_llm/providers/openai/streaming.rb +0 -55
  464. data/lib/ruby_llm/providers/openai/temperature.rb +0 -28
  465. data/lib/ruby_llm/providers/openai/transcription.rb +0 -71
  466. data/lib/ruby_llm/providers/perplexity/capabilities.rb +0 -72
  467. data/lib/ruby_llm/providers/vertexai/chat.rb +0 -14
  468. data/lib/ruby_llm/providers/vertexai/streaming.rb +0 -14
  469. data/lib/ruby_llm/stream_accumulator.rb +0 -218
  470. data/lib/ruby_llm/streaming.rb +0 -179
  471. data/lib/ruby_llm/tool_concurrency.rb +0 -105
  472. data/lib/ruby_llm/utils.rb +0 -130
  473. data/lib/tasks/models.rake +0 -593
  474. data/lib/tasks/release.rake +0 -94
  475. data/lib/tasks/vcr.rake +0 -124
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_llm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.0
4
+ version: 2.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carmine Paolino
8
- bindir: bin
8
+ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
@@ -93,34 +93,54 @@ dependencies:
93
93
  - - ">="
94
94
  - !ruby/object:Gem::Version
95
95
  version: '1'
96
+ - !ruby/object:Gem::Dependency
97
+ name: json
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "<"
101
+ - !ruby/object:Gem::Version
102
+ version: '3'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "<"
108
+ - !ruby/object:Gem::Version
109
+ version: '3'
96
110
  - !ruby/object:Gem::Dependency
97
111
  name: marcel
98
112
  requirement: !ruby/object:Gem::Requirement
99
113
  requirements:
100
- - - "~>"
114
+ - - ">="
101
115
  - !ruby/object:Gem::Version
102
- version: '1'
116
+ version: '1.0'
117
+ - - "<"
118
+ - !ruby/object:Gem::Version
119
+ version: '3'
103
120
  type: :runtime
104
121
  prerelease: false
105
122
  version_requirements: !ruby/object:Gem::Requirement
106
123
  requirements:
107
- - - "~>"
124
+ - - ">="
108
125
  - !ruby/object:Gem::Version
109
- version: '1'
126
+ version: '1.0'
127
+ - - "<"
128
+ - !ruby/object:Gem::Version
129
+ version: '3'
110
130
  - !ruby/object:Gem::Dependency
111
- name: ruby_llm-schema
131
+ name: schematist
112
132
  requirement: !ruby/object:Gem::Requirement
113
133
  requirements:
114
134
  - - "~>"
115
135
  - !ruby/object:Gem::Version
116
- version: '0'
136
+ version: '1.1'
117
137
  type: :runtime
118
138
  prerelease: false
119
139
  version_requirements: !ruby/object:Gem::Requirement
120
140
  requirements:
121
141
  - - "~>"
122
142
  - !ruby/object:Gem::Version
123
- version: '0'
143
+ version: '1.1'
124
144
  - !ruby/object:Gem::Dependency
125
145
  name: zeitwerk
126
146
  requirement: !ruby/object:Gem::Requirement
@@ -135,21 +155,25 @@ dependencies:
135
155
  - - "~>"
136
156
  - !ruby/object:Gem::Version
137
157
  version: '2'
138
- description: A single, beautiful Ruby framework for all major AI providers. Easily
139
- build chatbots, AI agents, RAG applications, content generators, and every AI workflow
140
- you can think of. Features chat (text, images, audio, PDFs), image generation, embeddings,
141
- tools (function calling), structured output, Rails integration, and streaming. Works
142
- with OpenAI, Anthropic, Google Gemini, AWS Bedrock, DeepSeek, Mistral, Ollama (local
143
- models), OpenRouter, Perplexity, GPUStack, and any OpenAI-compatible API. Minimal
144
- dependencies - just Faraday, Zeitwerk, and Marcel.
158
+ description: 'Build AI features the Ruby way. A delightful Ruby AI framework that
159
+ feels at home in Rails: switch models without rewriting your code, then scale from
160
+ a single call to production agents, RAG, and workflows. Features chat (text, images,
161
+ audio, PDFs), image generation, embeddings, tools (function calling), structured
162
+ output, Rails integration, and streaming. Works with OpenAI, Azure, Anthropic, Google
163
+ Gemini, Vertex AI, AWS Bedrock, xAI, Cohere, DeepSeek, Mistral, Perplexity, OpenRouter,
164
+ ElevenLabs, Deepgram, Ollama and GPUStack (local models), and any OpenAI-compatible
165
+ API. Plain Ruby with a small set of runtime dependencies.'
145
166
  email:
146
167
  - carmine@paolino.me
147
- executables: []
168
+ executables:
169
+ - ruby_llm
148
170
  extensions: []
149
171
  extra_rdoc_files: []
150
172
  files:
173
+ - ".rdoc_options"
151
174
  - LICENSE
152
175
  - README.md
176
+ - exe/ruby_llm
153
177
  - lib/generators/ruby_llm/agent/agent_generator.rb
154
178
  - lib/generators/ruby_llm/agent/templates/agent.rb.tt
155
179
  - lib/generators/ruby_llm/agent/templates/instructions.txt.erb.tt
@@ -198,164 +222,384 @@ files:
198
222
  - lib/generators/ruby_llm/chat_ui/templates/views/models/show.html.erb.tt
199
223
  - lib/generators/ruby_llm/generator_helpers.rb
200
224
  - lib/generators/ruby_llm/install/install_generator.rb
201
- - lib/generators/ruby_llm/install/templates/add_references_to_chats_tool_calls_and_messages_migration.rb.tt
202
225
  - lib/generators/ruby_llm/install/templates/chat_model.rb.tt
203
226
  - lib/generators/ruby_llm/install/templates/create_chats_migration.rb.tt
204
227
  - lib/generators/ruby_llm/install/templates/create_messages_migration.rb.tt
205
- - lib/generators/ruby_llm/install/templates/create_models_migration.rb.tt
206
- - lib/generators/ruby_llm/install/templates/create_tool_calls_migration.rb.tt
228
+ - lib/generators/ruby_llm/install/templates/create_ruby_llm_records_migration.rb.tt
207
229
  - lib/generators/ruby_llm/install/templates/initializer.rb.tt
208
230
  - lib/generators/ruby_llm/install/templates/message_model.rb.tt
209
- - lib/generators/ruby_llm/install/templates/model_model.rb.tt
210
- - lib/generators/ruby_llm/install/templates/tool_call_model.rb.tt
231
+ - lib/generators/ruby_llm/provider/cli.rb
232
+ - lib/generators/ruby_llm/provider/scaffold.rb
233
+ - lib/generators/ruby_llm/provider/templates/core/provider.rb.erb
234
+ - lib/generators/ruby_llm/provider/templates/core/provider_spec.rb.erb
235
+ - lib/generators/ruby_llm/provider/templates/gem/archspec.rb.erb
236
+ - lib/generators/ruby_llm/provider/templates/gem/bin/console.erb
237
+ - lib/generators/ruby_llm/provider/templates/gem/bin/setup.erb
238
+ - lib/generators/ruby_llm/provider/templates/gem/chat_schema_spec.rb.erb
239
+ - lib/generators/ruby_llm/provider/templates/gem/chat_spec.rb.erb
240
+ - lib/generators/ruby_llm/provider/templates/gem/chat_streaming_spec.rb.erb
241
+ - lib/generators/ruby_llm/provider/templates/gem/chat_tools_spec.rb.erb
242
+ - lib/generators/ruby_llm/provider/templates/gem/ci.yml.erb
243
+ - lib/generators/ruby_llm/provider/templates/gem/embedding_spec.rb.erb
244
+ - lib/generators/ruby_llm/provider/templates/gem/env.erb
245
+ - lib/generators/ruby_llm/provider/templates/gem/fixtures_gitkeep.erb
246
+ - lib/generators/ruby_llm/provider/templates/gem/flayignore.erb
247
+ - lib/generators/ruby_llm/provider/templates/gem/gemfile.erb
248
+ - lib/generators/ruby_llm/provider/templates/gem/gemspec.erb
249
+ - lib/generators/ruby_llm/provider/templates/gem/gitignore.erb
250
+ - lib/generators/ruby_llm/provider/templates/gem/gitleaks.yml.erb
251
+ - lib/generators/ruby_llm/provider/templates/gem/image_spec.rb.erb
252
+ - lib/generators/ruby_llm/provider/templates/gem/license.erb
253
+ - lib/generators/ruby_llm/provider/templates/gem/models.rb.erb
254
+ - lib/generators/ruby_llm/provider/templates/gem/models_spec.rb.erb
255
+ - lib/generators/ruby_llm/provider/templates/gem/moderation_spec.rb.erb
256
+ - lib/generators/ruby_llm/provider/templates/gem/overcommit.yml.erb
257
+ - lib/generators/ruby_llm/provider/templates/gem/provider.rb.erb
258
+ - lib/generators/ruby_llm/provider/templates/gem/provider_spec.rb.erb
259
+ - lib/generators/ruby_llm/provider/templates/gem/rakefile.erb
260
+ - lib/generators/ruby_llm/provider/templates/gem/readme.md.erb
261
+ - lib/generators/ruby_llm/provider/templates/gem/release.yml.erb
262
+ - lib/generators/ruby_llm/provider/templates/gem/rerank_spec.rb.erb
263
+ - lib/generators/ruby_llm/provider/templates/gem/rspec.erb
264
+ - lib/generators/ruby_llm/provider/templates/gem/rubocop.yml.erb
265
+ - lib/generators/ruby_llm/provider/templates/gem/rubyllm_configuration.rb.erb
266
+ - lib/generators/ruby_llm/provider/templates/gem/spec_helper.rb.erb
267
+ - lib/generators/ruby_llm/provider/templates/gem/speech_spec.rb.erb
268
+ - lib/generators/ruby_llm/provider/templates/gem/vcr_configuration.rb.erb
269
+ - lib/generators/ruby_llm/provider/templates/gem/video_spec.rb.erb
211
270
  - lib/generators/ruby_llm/schema/schema_generator.rb
212
271
  - lib/generators/ruby_llm/schema/templates/schema.rb.tt
272
+ - lib/generators/ruby_llm/tool/templates/tailwind/tool_call.html.erb.tt
273
+ - lib/generators/ruby_llm/tool/templates/tailwind/tool_result.html.erb.tt
213
274
  - lib/generators/ruby_llm/tool/templates/tool.rb.tt
214
275
  - lib/generators/ruby_llm/tool/templates/tool_call.html.erb.tt
215
276
  - lib/generators/ruby_llm/tool/templates/tool_result.html.erb.tt
216
277
  - lib/generators/ruby_llm/tool/tool_generator.rb
217
- - lib/generators/ruby_llm/upgrade_to_v1_10/templates/add_v1_10_message_columns.rb.tt
218
- - lib/generators/ruby_llm/upgrade_to_v1_10/upgrade_to_v1_10_generator.rb
219
- - lib/generators/ruby_llm/upgrade_to_v1_14/templates/add_v1_14_tool_call_columns.rb.tt
220
- - lib/generators/ruby_llm/upgrade_to_v1_14/upgrade_to_v1_14_generator.rb
221
- - lib/generators/ruby_llm/upgrade_to_v1_7/templates/migration.rb.tt
222
- - lib/generators/ruby_llm/upgrade_to_v1_7/upgrade_to_v1_7_generator.rb
223
- - lib/generators/ruby_llm/upgrade_to_v1_9/templates/add_v1_9_message_columns.rb.tt
224
- - lib/generators/ruby_llm/upgrade_to_v1_9/upgrade_to_v1_9_generator.rb
278
+ - lib/generators/ruby_llm/upgrade/templates/backfill_v2_data.rb.tt
279
+ - lib/generators/ruby_llm/upgrade/templates/cleanup_v2_upgrade.rb.tt
280
+ - lib/generators/ruby_llm/upgrade/templates/finish_v2_upgrade.rb.tt
281
+ - lib/generators/ruby_llm/upgrade/templates/prepare_v2_upgrade.rb.tt
282
+ - lib/generators/ruby_llm/upgrade/templates/ruby_llm_upgrade.rb.tt
283
+ - lib/generators/ruby_llm/upgrade/templates/upgrade_initializer.rb.tt
284
+ - lib/generators/ruby_llm/upgrade/upgrade_generator.rb
285
+ - lib/generators/ruby_llm/upgrade/upgrade_migration.rb
225
286
  - lib/ruby_llm.rb
287
+ - lib/ruby_llm/accounting/usage.rb
226
288
  - lib/ruby_llm/active_record/acts_as.rb
227
- - lib/ruby_llm/active_record/acts_as_legacy.rb
289
+ - lib/ruby_llm/active_record/attachment_helpers.rb
290
+ - lib/ruby_llm/active_record/batch.rb
228
291
  - lib/ruby_llm/active_record/chat_methods.rb
229
292
  - lib/ruby_llm/active_record/message_methods.rb
230
- - lib/ruby_llm/active_record/model_methods.rb
293
+ - lib/ruby_llm/active_record/model.rb
231
294
  - lib/ruby_llm/active_record/payload_helpers.rb
232
- - lib/ruby_llm/active_record/tool_call_methods.rb
295
+ - lib/ruby_llm/active_record/tool_call.rb
296
+ - lib/ruby_llm/active_record/usage.rb
233
297
  - lib/ruby_llm/agent.rb
234
298
  - lib/ruby_llm/aliases.json
235
- - lib/ruby_llm/aliases.rb
236
299
  - lib/ruby_llm/attachment.rb
300
+ - lib/ruby_llm/batch.rb
301
+ - lib/ruby_llm/cached_content.rb
237
302
  - lib/ruby_llm/chat.rb
303
+ - lib/ruby_llm/chat/tool_concurrency.rb
238
304
  - lib/ruby_llm/chunk.rb
305
+ - lib/ruby_llm/citation.rb
239
306
  - lib/ruby_llm/configuration.rb
240
- - lib/ruby_llm/connection.rb
241
- - lib/ruby_llm/content.rb
242
307
  - lib/ruby_llm/context.rb
243
308
  - lib/ruby_llm/cost.rb
244
- - lib/ruby_llm/deprecator.rb
309
+ - lib/ruby_llm/downloaded_file.rb
245
310
  - lib/ruby_llm/embedding.rb
311
+ - lib/ruby_llm/embedding_request.rb
246
312
  - lib/ruby_llm/error.rb
247
- - lib/ruby_llm/error_middleware.rb
313
+ - lib/ruby_llm/fallback.rb
314
+ - lib/ruby_llm/files/mime_type.rb
248
315
  - lib/ruby_llm/image.rb
249
- - lib/ruby_llm/instrumentation.rb
250
316
  - lib/ruby_llm/message.rb
251
- - lib/ruby_llm/mime_type.rb
252
317
  - lib/ruby_llm/model.rb
253
- - lib/ruby_llm/model/info.rb
254
318
  - lib/ruby_llm/model/modalities.rb
255
319
  - lib/ruby_llm/model/pricing.rb
256
320
  - lib/ruby_llm/model/pricing_category.rb
257
321
  - lib/ruby_llm/model/pricing_tier.rb
258
- - lib/ruby_llm/model_registry.rb
259
322
  - lib/ruby_llm/models.json
260
323
  - lib/ruby_llm/models.rb
261
- - lib/ruby_llm/models_schema.json
324
+ - lib/ruby_llm/models/aliases.rb
325
+ - lib/ruby_llm/models/registry.rb
326
+ - lib/ruby_llm/models/schema.rb
262
327
  - lib/ruby_llm/moderation.rb
328
+ - lib/ruby_llm/ocr.rb
329
+ - lib/ruby_llm/prompt.rb
330
+ - lib/ruby_llm/protocol.rb
331
+ - lib/ruby_llm/protocol/binary_streaming.rb
332
+ - lib/ruby_llm/protocol/stream_accumulator.rb
333
+ - lib/ruby_llm/protocol/streaming.rb
334
+ - lib/ruby_llm/protocols/anthropic.rb
335
+ - lib/ruby_llm/protocols/anthropic/batches.rb
336
+ - lib/ruby_llm/protocols/anthropic/chat.rb
337
+ - lib/ruby_llm/protocols/anthropic/embeddings.rb
338
+ - lib/ruby_llm/protocols/anthropic/files.rb
339
+ - lib/ruby_llm/protocols/anthropic/media.rb
340
+ - lib/ruby_llm/protocols/anthropic/models.rb
341
+ - lib/ruby_llm/protocols/anthropic/streaming.rb
342
+ - lib/ruby_llm/protocols/anthropic/tools.rb
343
+ - lib/ruby_llm/protocols/azure/files.rb
344
+ - lib/ruby_llm/protocols/bedrock/async_videos.rb
345
+ - lib/ruby_llm/protocols/bedrock/batches.rb
346
+ - lib/ruby_llm/protocols/bedrock/files.rb
347
+ - lib/ruby_llm/protocols/bedrock/guardrails.rb
348
+ - lib/ruby_llm/protocols/bedrock/rerank.rb
349
+ - lib/ruby_llm/protocols/chat_completions.rb
350
+ - lib/ruby_llm/protocols/chat_completions/batches.rb
351
+ - lib/ruby_llm/protocols/chat_completions/chat.rb
352
+ - lib/ruby_llm/protocols/chat_completions/embedding_batches.rb
353
+ - lib/ruby_llm/protocols/chat_completions/embeddings.rb
354
+ - lib/ruby_llm/protocols/chat_completions/images.rb
355
+ - lib/ruby_llm/protocols/chat_completions/media.rb
356
+ - lib/ruby_llm/protocols/chat_completions/models.rb
357
+ - lib/ruby_llm/protocols/chat_completions/moderation.rb
358
+ - lib/ruby_llm/protocols/chat_completions/rerank.rb
359
+ - lib/ruby_llm/protocols/chat_completions/speech.rb
360
+ - lib/ruby_llm/protocols/chat_completions/streaming.rb
361
+ - lib/ruby_llm/protocols/chat_completions/tools.rb
362
+ - lib/ruby_llm/protocols/chat_completions/transcription.rb
363
+ - lib/ruby_llm/protocols/cohere.rb
364
+ - lib/ruby_llm/protocols/cohere/batch_requests.rb
365
+ - lib/ruby_llm/protocols/cohere/batches.rb
366
+ - lib/ruby_llm/protocols/cohere/chat.rb
367
+ - lib/ruby_llm/protocols/cohere/datasets.rb
368
+ - lib/ruby_llm/protocols/cohere/embeddings.rb
369
+ - lib/ruby_llm/protocols/cohere/media.rb
370
+ - lib/ruby_llm/protocols/cohere/models.rb
371
+ - lib/ruby_llm/protocols/cohere/ocr.rb
372
+ - lib/ruby_llm/protocols/cohere/rerank.rb
373
+ - lib/ruby_llm/protocols/cohere/streaming.rb
374
+ - lib/ruby_llm/protocols/cohere/tokenization.rb
375
+ - lib/ruby_llm/protocols/cohere/tools.rb
376
+ - lib/ruby_llm/protocols/cohere/transcription.rb
377
+ - lib/ruby_llm/protocols/converse.rb
378
+ - lib/ruby_llm/protocols/converse/batches.rb
379
+ - lib/ruby_llm/protocols/converse/chat.rb
380
+ - lib/ruby_llm/protocols/converse/media.rb
381
+ - lib/ruby_llm/protocols/converse/streaming.rb
382
+ - lib/ruby_llm/protocols/converse/thinking_stream.rb
383
+ - lib/ruby_llm/protocols/deepgram.rb
384
+ - lib/ruby_llm/protocols/deepgram/models.rb
385
+ - lib/ruby_llm/protocols/deepgram/speech.rb
386
+ - lib/ruby_llm/protocols/deepgram/streaming_transcription.rb
387
+ - lib/ruby_llm/protocols/deepgram/transcription.rb
388
+ - lib/ruby_llm/protocols/deepseek/files.rb
389
+ - lib/ruby_llm/protocols/elevenlabs.rb
390
+ - lib/ruby_llm/protocols/elevenlabs/assets.rb
391
+ - lib/ruby_llm/protocols/elevenlabs/flows.rb
392
+ - lib/ruby_llm/protocols/elevenlabs/flows/images.rb
393
+ - lib/ruby_llm/protocols/elevenlabs/flows/media.rb
394
+ - lib/ruby_llm/protocols/elevenlabs/flows/videos.rb
395
+ - lib/ruby_llm/protocols/elevenlabs/models.rb
396
+ - lib/ruby_llm/protocols/elevenlabs/speech.rb
397
+ - lib/ruby_llm/protocols/elevenlabs/streaming_transcription.rb
398
+ - lib/ruby_llm/protocols/elevenlabs/transcription.rb
399
+ - lib/ruby_llm/protocols/files.rb
400
+ - lib/ruby_llm/protocols/gemini.rb
401
+ - lib/ruby_llm/protocols/gemini/batches.rb
402
+ - lib/ruby_llm/protocols/gemini/caches.rb
403
+ - lib/ruby_llm/protocols/gemini/chat.rb
404
+ - lib/ruby_llm/protocols/gemini/embedding_batches.rb
405
+ - lib/ruby_llm/protocols/gemini/embeddings.rb
406
+ - lib/ruby_llm/protocols/gemini/file_transcription.rb
407
+ - lib/ruby_llm/protocols/gemini/files.rb
408
+ - lib/ruby_llm/protocols/gemini/images.rb
409
+ - lib/ruby_llm/protocols/gemini/live_transcription.rb
410
+ - lib/ruby_llm/protocols/gemini/media.rb
411
+ - lib/ruby_llm/protocols/gemini/models.rb
412
+ - lib/ruby_llm/protocols/gemini/speech.rb
413
+ - lib/ruby_llm/protocols/gemini/streaming.rb
414
+ - lib/ruby_llm/protocols/gemini/tools.rb
415
+ - lib/ruby_llm/protocols/gemini/transcription.rb
416
+ - lib/ruby_llm/protocols/gemini/videos.rb
417
+ - lib/ruby_llm/protocols/gpustack/responses.rb
418
+ - lib/ruby_llm/protocols/gpustack/tokenization.rb
419
+ - lib/ruby_llm/protocols/gpustack/videos.rb
420
+ - lib/ruby_llm/protocols/interactions.rb
421
+ - lib/ruby_llm/protocols/interactions/chat.rb
422
+ - lib/ruby_llm/protocols/interactions/content.rb
423
+ - lib/ruby_llm/protocols/interactions/streaming.rb
424
+ - lib/ruby_llm/protocols/interactions/tools.rb
425
+ - lib/ruby_llm/protocols/interactions/transcription.rb
426
+ - lib/ruby_llm/protocols/invoke_model.rb
427
+ - lib/ruby_llm/protocols/invoke_model/cohere_embeddings.rb
428
+ - lib/ruby_llm/protocols/invoke_model/embedding_batches.rb
429
+ - lib/ruby_llm/protocols/invoke_model/nova_embeddings.rb
430
+ - lib/ruby_llm/protocols/invoke_model/stability_images.rb
431
+ - lib/ruby_llm/protocols/invoke_model/titan_multimodal_embeddings.rb
432
+ - lib/ruby_llm/protocols/invoke_model/titan_text_embeddings.rb
433
+ - lib/ruby_llm/protocols/mistral/content.rb
434
+ - lib/ruby_llm/protocols/mistral/conversations.rb
435
+ - lib/ruby_llm/protocols/mistral/conversations/chat.rb
436
+ - lib/ruby_llm/protocols/mistral/conversations/images.rb
437
+ - lib/ruby_llm/protocols/mistral/conversations/streaming.rb
438
+ - lib/ruby_llm/protocols/mistral/files.rb
439
+ - lib/ruby_llm/protocols/mistral/multi_completion.rb
440
+ - lib/ruby_llm/protocols/openai/batches.rb
441
+ - lib/ruby_llm/protocols/openai/files.rb
442
+ - lib/ruby_llm/protocols/openrouter/batches.rb
443
+ - lib/ruby_llm/protocols/openrouter/files.rb
444
+ - lib/ruby_llm/protocols/openrouter/responses.rb
445
+ - lib/ruby_llm/protocols/openrouter/transcription.rb
446
+ - lib/ruby_llm/protocols/perplexity/files.rb
447
+ - lib/ruby_llm/protocols/perplexity/router.rb
448
+ - lib/ruby_llm/protocols/responses.rb
449
+ - lib/ruby_llm/protocols/responses/approvals.rb
450
+ - lib/ruby_llm/protocols/responses/batches.rb
451
+ - lib/ruby_llm/protocols/responses/chat.rb
452
+ - lib/ruby_llm/protocols/responses/compaction.rb
453
+ - lib/ruby_llm/protocols/responses/media.rb
454
+ - lib/ruby_llm/protocols/responses/streaming.rb
455
+ - lib/ruby_llm/protocols/responses/token_counting.rb
456
+ - lib/ruby_llm/protocols/responses/tools.rb
457
+ - lib/ruby_llm/protocols/vertexai/batch_prediction.rb
458
+ - lib/ruby_llm/protocols/vertexai/embedding_prediction.rb
459
+ - lib/ruby_llm/protocols/vertexai/embedding_prediction/requests.rb
460
+ - lib/ruby_llm/protocols/vertexai/embedding_prediction/results.rb
461
+ - lib/ruby_llm/protocols/vertexai/files.rb
462
+ - lib/ruby_llm/protocols/vertexai/ranking.rb
463
+ - lib/ruby_llm/protocols/vertexai/research.rb
464
+ - lib/ruby_llm/protocols/xai/files.rb
465
+ - lib/ruby_llm/protocols/xai/streaming_transcription.rb
466
+ - lib/ruby_llm/protocols/xai/tokenization.rb
263
467
  - lib/ruby_llm/provider.rb
264
468
  - lib/ruby_llm/providers/anthropic.rb
265
469
  - lib/ruby_llm/providers/anthropic/capabilities.rb
266
- - lib/ruby_llm/providers/anthropic/chat.rb
267
- - lib/ruby_llm/providers/anthropic/content.rb
268
- - lib/ruby_llm/providers/anthropic/embeddings.rb
269
- - lib/ruby_llm/providers/anthropic/media.rb
270
- - lib/ruby_llm/providers/anthropic/models.rb
271
- - lib/ruby_llm/providers/anthropic/streaming.rb
272
- - lib/ruby_llm/providers/anthropic/tools.rb
273
470
  - lib/ruby_llm/providers/azure.rb
471
+ - lib/ruby_llm/providers/azure/audio.rb
472
+ - lib/ruby_llm/providers/azure/capabilities.rb
274
473
  - lib/ruby_llm/providers/azure/chat.rb
474
+ - lib/ruby_llm/providers/azure/chat_completions.rb
475
+ - lib/ruby_llm/providers/azure/chat_completions/batches.rb
476
+ - lib/ruby_llm/providers/azure/cohere.rb
275
477
  - lib/ruby_llm/providers/azure/embeddings.rb
478
+ - lib/ruby_llm/providers/azure/images.rb
276
479
  - lib/ruby_llm/providers/azure/media.rb
277
480
  - lib/ruby_llm/providers/azure/models.rb
481
+ - lib/ruby_llm/providers/azure/responses.rb
482
+ - lib/ruby_llm/providers/azure/videos.rb
278
483
  - lib/ruby_llm/providers/bedrock.rb
279
484
  - lib/ruby_llm/providers/bedrock/auth.rb
280
- - lib/ruby_llm/providers/bedrock/chat.rb
281
- - lib/ruby_llm/providers/bedrock/media.rb
485
+ - lib/ruby_llm/providers/bedrock/capabilities.rb
486
+ - lib/ruby_llm/providers/bedrock/mantle.rb
487
+ - lib/ruby_llm/providers/bedrock/mantle/anthropic.rb
488
+ - lib/ruby_llm/providers/bedrock/mantle/chat_completions.rb
489
+ - lib/ruby_llm/providers/bedrock/mantle/responses.rb
490
+ - lib/ruby_llm/providers/bedrock/mantle/voxtral.rb
282
491
  - lib/ruby_llm/providers/bedrock/models.rb
283
- - lib/ruby_llm/providers/bedrock/streaming.rb
492
+ - lib/ruby_llm/providers/cohere.rb
493
+ - lib/ruby_llm/providers/deepgram.rb
284
494
  - lib/ruby_llm/providers/deepseek.rb
285
495
  - lib/ruby_llm/providers/deepseek/capabilities.rb
286
496
  - lib/ruby_llm/providers/deepseek/chat.rb
497
+ - lib/ruby_llm/providers/deepseek/responses.rb
498
+ - lib/ruby_llm/providers/elevenlabs.rb
287
499
  - lib/ruby_llm/providers/gemini.rb
288
500
  - lib/ruby_llm/providers/gemini/capabilities.rb
289
- - lib/ruby_llm/providers/gemini/chat.rb
290
- - lib/ruby_llm/providers/gemini/embeddings.rb
291
- - lib/ruby_llm/providers/gemini/images.rb
292
- - lib/ruby_llm/providers/gemini/media.rb
293
- - lib/ruby_llm/providers/gemini/models.rb
294
- - lib/ruby_llm/providers/gemini/streaming.rb
295
- - lib/ruby_llm/providers/gemini/tools.rb
296
- - lib/ruby_llm/providers/gemini/transcription.rb
297
501
  - lib/ruby_llm/providers/gpustack.rb
298
- - lib/ruby_llm/providers/gpustack/capabilities.rb
299
502
  - lib/ruby_llm/providers/gpustack/chat.rb
503
+ - lib/ruby_llm/providers/gpustack/embeddings.rb
300
504
  - lib/ruby_llm/providers/gpustack/media.rb
301
505
  - lib/ruby_llm/providers/gpustack/models.rb
506
+ - lib/ruby_llm/providers/gpustack/speech.rb
507
+ - lib/ruby_llm/providers/gpustack/transcription.rb
302
508
  - lib/ruby_llm/providers/mistral.rb
303
509
  - lib/ruby_llm/providers/mistral/capabilities.rb
304
510
  - lib/ruby_llm/providers/mistral/chat.rb
511
+ - lib/ruby_llm/providers/mistral/chat_completions.rb
512
+ - lib/ruby_llm/providers/mistral/chat_completions/batches.rb
513
+ - lib/ruby_llm/providers/mistral/conversations.rb
305
514
  - lib/ruby_llm/providers/mistral/embeddings.rb
306
515
  - lib/ruby_llm/providers/mistral/media.rb
307
516
  - lib/ruby_llm/providers/mistral/models.rb
517
+ - lib/ruby_llm/providers/mistral/ocr.rb
518
+ - lib/ruby_llm/providers/mistral/speech.rb
519
+ - lib/ruby_llm/providers/mistral/transcription.rb
308
520
  - lib/ruby_llm/providers/ollama.rb
309
- - lib/ruby_llm/providers/ollama/capabilities.rb
310
521
  - lib/ruby_llm/providers/ollama/chat.rb
311
522
  - lib/ruby_llm/providers/ollama/media.rb
312
523
  - lib/ruby_llm/providers/ollama/models.rb
524
+ - lib/ruby_llm/providers/ollama_cloud.rb
525
+ - lib/ruby_llm/providers/ollama_cloud/models.rb
313
526
  - lib/ruby_llm/providers/openai.rb
314
527
  - lib/ruby_llm/providers/openai/capabilities.rb
315
- - lib/ruby_llm/providers/openai/chat.rb
316
- - lib/ruby_llm/providers/openai/embeddings.rb
317
- - lib/ruby_llm/providers/openai/images.rb
318
- - lib/ruby_llm/providers/openai/media.rb
319
528
  - lib/ruby_llm/providers/openai/models.rb
320
- - lib/ruby_llm/providers/openai/moderation.rb
321
- - lib/ruby_llm/providers/openai/streaming.rb
322
- - lib/ruby_llm/providers/openai/temperature.rb
323
- - lib/ruby_llm/providers/openai/tools.rb
324
- - lib/ruby_llm/providers/openai/transcription.rb
529
+ - lib/ruby_llm/providers/openai/responses.rb
325
530
  - lib/ruby_llm/providers/openrouter.rb
326
531
  - lib/ruby_llm/providers/openrouter/chat.rb
532
+ - lib/ruby_llm/providers/openrouter/embeddings.rb
327
533
  - lib/ruby_llm/providers/openrouter/images.rb
534
+ - lib/ruby_llm/providers/openrouter/media.rb
328
535
  - lib/ruby_llm/providers/openrouter/models.rb
536
+ - lib/ruby_llm/providers/openrouter/speech.rb
329
537
  - lib/ruby_llm/providers/openrouter/streaming.rb
538
+ - lib/ruby_llm/providers/openrouter/videos.rb
330
539
  - lib/ruby_llm/providers/perplexity.rb
331
- - lib/ruby_llm/providers/perplexity/capabilities.rb
332
540
  - lib/ruby_llm/providers/perplexity/chat.rb
541
+ - lib/ruby_llm/providers/perplexity/embeddings.rb
333
542
  - lib/ruby_llm/providers/perplexity/media.rb
334
543
  - lib/ruby_llm/providers/perplexity/models.rb
335
544
  - lib/ruby_llm/providers/vertexai.rb
336
- - lib/ruby_llm/providers/vertexai/chat.rb
545
+ - lib/ruby_llm/providers/vertexai/anthropic.rb
546
+ - lib/ruby_llm/providers/vertexai/anthropic/batches.rb
547
+ - lib/ruby_llm/providers/vertexai/capabilities.rb
548
+ - lib/ruby_llm/providers/vertexai/chat_completions.rb
549
+ - lib/ruby_llm/providers/vertexai/chat_completions/batches.rb
550
+ - lib/ruby_llm/providers/vertexai/embed_content.rb
337
551
  - lib/ruby_llm/providers/vertexai/embeddings.rb
552
+ - lib/ruby_llm/providers/vertexai/gemini.rb
553
+ - lib/ruby_llm/providers/vertexai/gemini/batches.rb
554
+ - lib/ruby_llm/providers/vertexai/live_transcription.rb
555
+ - lib/ruby_llm/providers/vertexai/mistral.rb
338
556
  - lib/ruby_llm/providers/vertexai/models.rb
339
- - lib/ruby_llm/providers/vertexai/streaming.rb
340
557
  - lib/ruby_llm/providers/vertexai/transcription.rb
558
+ - lib/ruby_llm/providers/vertexai/videos.rb
341
559
  - lib/ruby_llm/providers/xai.rb
560
+ - lib/ruby_llm/providers/xai/capabilities.rb
342
561
  - lib/ruby_llm/providers/xai/chat.rb
562
+ - lib/ruby_llm/providers/xai/chat_completions.rb
563
+ - lib/ruby_llm/providers/xai/chat_completions/batches.rb
564
+ - lib/ruby_llm/providers/xai/images.rb
343
565
  - lib/ruby_llm/providers/xai/models.rb
566
+ - lib/ruby_llm/providers/xai/reported_cost.rb
567
+ - lib/ruby_llm/providers/xai/responses.rb
568
+ - lib/ruby_llm/providers/xai/speech.rb
569
+ - lib/ruby_llm/providers/xai/transcription.rb
570
+ - lib/ruby_llm/providers/xai/videos.rb
344
571
  - lib/ruby_llm/railtie.rb
345
- - lib/ruby_llm/stream_accumulator.rb
346
- - lib/ruby_llm/streaming.rb
572
+ - lib/ruby_llm/rerank.rb
573
+ - lib/ruby_llm/research_job.rb
574
+ - lib/ruby_llm/search_results.rb
575
+ - lib/ruby_llm/server_tool_call.rb
576
+ - lib/ruby_llm/speech.rb
577
+ - lib/ruby_llm/speech_chunk.rb
578
+ - lib/ruby_llm/support/deprecator.rb
579
+ - lib/ruby_llm/support/inspectable.rb
580
+ - lib/ruby_llm/support/instrumentation.rb
581
+ - lib/ruby_llm/support/utils.rb
347
582
  - lib/ruby_llm/thinking.rb
583
+ - lib/ruby_llm/tokenization.rb
348
584
  - lib/ruby_llm/tokens.rb
349
585
  - lib/ruby_llm/tool.rb
350
586
  - lib/ruby_llm/tool_call.rb
351
- - lib/ruby_llm/tool_concurrency.rb
587
+ - lib/ruby_llm/tools/server_tools.rb
352
588
  - lib/ruby_llm/transcription.rb
353
- - lib/ruby_llm/utils.rb
589
+ - lib/ruby_llm/transcription/wav_audio.rb
590
+ - lib/ruby_llm/transcription_chunk.rb
591
+ - lib/ruby_llm/transport/connection.rb
592
+ - lib/ruby_llm/transport/error_middleware.rb
593
+ - lib/ruby_llm/transport/usage_middleware.rb
594
+ - lib/ruby_llm/transport/websocket_connection.rb
595
+ - lib/ruby_llm/uploaded_file.rb
354
596
  - lib/ruby_llm/version.rb
355
- - lib/tasks/models.rake
356
- - lib/tasks/release.rake
597
+ - lib/ruby_llm/video.rb
598
+ - lib/ruby_llm/video_job.rb
599
+ - lib/ruby_llm/workflow.rb
357
600
  - lib/tasks/ruby_llm.rake
358
- - lib/tasks/vcr.rake
601
+ - skills/rubyllm/SKILL.md
602
+ - skills/rubyllm/agents/openai.yaml
359
603
  homepage: https://rubyllm.com
360
604
  licenses:
361
605
  - MIT
@@ -363,27 +607,24 @@ metadata:
363
607
  homepage_uri: https://rubyllm.com
364
608
  source_code_uri: https://github.com/crmne/ruby_llm
365
609
  changelog_uri: https://github.com/crmne/ruby_llm/releases
366
- documentation_uri: https://rubyllm.com
610
+ documentation_uri: https://rubyllm.com/next/
367
611
  bug_tracker_uri: https://github.com/crmne/ruby_llm/issues
368
612
  funding_uri: https://github.com/sponsors/crmne
369
613
  rubygems_mfa_required: 'true'
370
614
  post_install_message: |
371
- RubyLLM 1.15 upgrade note:
615
+ RubyLLM 2.0.0.rc2
372
616
 
373
- Token accounting is now normalized across providers. `input_tokens` means
374
- standard input tokens; prompt cache reads and writes are exposed separately
375
- as `cache_read_tokens` and `cache_write_tokens`.
617
+ 2.0 renames several APIs and changes what message content returns. Coming
618
+ from 1.x? Read the upgrade guide before you boot:
376
619
 
377
- Need request-side input activity?
378
- input_tokens + cache_read_tokens + cache_write_tokens
620
+ https://rubyllm.com/next/upgrading/
379
621
 
380
- New cost helpers:
381
- response.cost.total
382
- chat.cost.total
383
- agent.cost.total
622
+ The Rails upgrade uses forward-only preparation, backfill, and finish
623
+ phases, with cleanup later. Rename mode is the default; optional copy
624
+ mode supports a controlled return to 1.16. Read its requirements in the
625
+ upgrade guide and rehearse on a recent production snapshot.
384
626
 
385
- Upgrading from RubyLLM < 1.15? Read the full upgrade guide:
386
- https://rubyllm.com/upgrading/
627
+ Agent skill: https://rubyllm.com/next/ai-coding-assistants/
387
628
  rdoc_options: []
388
629
  require_paths:
389
630
  - lib
@@ -398,7 +639,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
398
639
  - !ruby/object:Gem::Version
399
640
  version: '0'
400
641
  requirements: []
401
- rubygems_version: 4.0.10
642
+ rubygems_version: 4.0.16
402
643
  specification_version: 4
403
- summary: A single, beautiful Ruby framework for all major AI providers.
644
+ summary: 'Build AI features the Ruby way: a delightful Ruby AI framework for every
645
+ major AI provider.'
404
646
  test_files: []
@@ -1,9 +0,0 @@
1
- class AddReferencesTo<%= "#{chat_model_name.gsub('::', '').pluralize}#{tool_call_model_name.gsub('::', '').pluralize}And#{message_model_name.gsub('::', '').pluralize}" %> < ActiveRecord::Migration<%= migration_version %>
2
- def change
3
- add_reference :<%= chat_table_name %>, :<%= model_table_name.singularize %>, foreign_key: true
4
- add_reference :<%= tool_call_table_name %>, :<%= message_table_name.singularize %>, null: false, foreign_key: true
5
- add_reference :<%= message_table_name %>, :<%= chat_table_name.singularize %>, null: false, foreign_key: true
6
- add_reference :<%= message_table_name %>, :<%= model_table_name.singularize %>, foreign_key: true
7
- add_reference :<%= message_table_name %>, :<%= tool_call_table_name.singularize %>, foreign_key: true
8
- end
9
- end