kiln-ai 0.17.0__tar.gz → 0.23.0__tar.gz

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 (289) hide show
  1. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/.gitignore +2 -0
  2. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/PKG-INFO +122 -7
  3. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/README.md +110 -4
  4. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/data_gen/data_gen_task.html +1 -1
  5. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/data_gen.html +1 -1
  6. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/eval/base_eval.html +1 -1
  7. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/eval/eval_runner.html +1 -1
  8. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/eval/g_eval.html +1 -1
  9. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/eval/registry.html +1 -1
  10. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/eval.html +1 -1
  11. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/fine_tune/base_finetune.html +1 -1
  12. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/fine_tune/dataset_formatter.html +1 -1
  13. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/fine_tune/finetune_registry.html +1 -1
  14. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/fine_tune/openai_finetune.html +1 -1
  15. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/fine_tune.html +1 -1
  16. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/ml_model_list.html +1 -1
  17. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/model_adapters/base_adapter.html +1 -1
  18. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/model_adapters/litellm_adapter.html +1 -1
  19. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/model_adapters.html +1 -1
  20. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/prompt_builders.html +1 -1
  21. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/repair/repair_task.html +1 -1
  22. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters/repair.html +1 -1
  23. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/adapters.html +1 -1
  24. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/datamodel/dataset_split.html +1 -1
  25. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/datamodel/eval.html +1 -1
  26. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/datamodel/strict_mode.html +1 -1
  27. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/datamodel.html +3 -3
  28. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/utils/config.html +1 -1
  29. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/utils/formatting.html +1 -1
  30. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai/utils.html +1 -1
  31. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/kiln_ai.html +4 -4
  32. kiln_ai-0.23.0/docs/kiln_core_docs/search.js +46 -0
  33. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/__init__.py +8 -2
  34. kiln_ai-0.23.0/kiln_ai/adapters/adapter_registry.py +62 -0
  35. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/chat/chat_formatter.py +23 -21
  36. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/chat/test_chat_formatter.py +6 -2
  37. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/__init__.py +14 -0
  38. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/base_chunker.py +42 -0
  39. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/chunker_registry.py +19 -0
  40. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/embedding_wrapper.py +46 -0
  41. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/fixed_window_chunker.py +31 -0
  42. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/helpers.py +23 -0
  43. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/semantic_chunker.py +71 -0
  44. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/test_base_chunker.py +67 -0
  45. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/test_chunker_registry.py +54 -0
  46. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/test_embedding_wrapper.py +107 -0
  47. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/test_fixed_window_chunker.py +350 -0
  48. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/test_helpers.py +75 -0
  49. kiln_ai-0.23.0/kiln_ai/adapters/chunkers/test_semantic_chunker.py +302 -0
  50. kiln_ai-0.23.0/kiln_ai/adapters/data_gen/data_gen_prompts.py +272 -0
  51. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/data_gen/data_gen_task.py +51 -38
  52. kiln_ai-0.23.0/kiln_ai/adapters/data_gen/qna_gen_task.py +73 -0
  53. kiln_ai-0.23.0/kiln_ai/adapters/data_gen/test_data_gen_task.py +648 -0
  54. kiln_ai-0.23.0/kiln_ai/adapters/data_gen/test_qna_gen_task.py +169 -0
  55. kiln_ai-0.23.0/kiln_ai/adapters/docker_model_runner_tools.py +119 -0
  56. kiln_ai-0.23.0/kiln_ai/adapters/embedding/__init__.py +0 -0
  57. kiln_ai-0.23.0/kiln_ai/adapters/embedding/base_embedding_adapter.py +44 -0
  58. kiln_ai-0.23.0/kiln_ai/adapters/embedding/embedding_registry.py +32 -0
  59. kiln_ai-0.23.0/kiln_ai/adapters/embedding/litellm_embedding_adapter.py +202 -0
  60. kiln_ai-0.23.0/kiln_ai/adapters/embedding/test_base_embedding_adapter.py +282 -0
  61. kiln_ai-0.23.0/kiln_ai/adapters/embedding/test_embedding_registry.py +144 -0
  62. kiln_ai-0.23.0/kiln_ai/adapters/embedding/test_litellm_embedding_adapter.py +1209 -0
  63. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/eval/base_eval.py +13 -11
  64. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/eval/eval_runner.py +41 -10
  65. kiln_ai-0.23.0/kiln_ai/adapters/eval/eval_utils/eval_trace_formatter.py +165 -0
  66. kiln_ai-0.23.0/kiln_ai/adapters/eval/eval_utils/eval_utils.py +67 -0
  67. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/eval/g_eval.py +134 -19
  68. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/eval/test_base_eval.py +51 -18
  69. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/eval/test_eval_runner.py +215 -23
  70. kiln_ai-0.23.0/kiln_ai/adapters/eval/test_eval_utils.py +706 -0
  71. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/eval/test_g_eval.py +324 -15
  72. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/eval/test_g_eval_data.py +1 -1
  73. kiln_ai-0.23.0/kiln_ai/adapters/extractors/__init__.py +18 -0
  74. kiln_ai-0.23.0/kiln_ai/adapters/extractors/base_extractor.py +76 -0
  75. kiln_ai-0.23.0/kiln_ai/adapters/extractors/encoding.py +20 -0
  76. kiln_ai-0.23.0/kiln_ai/adapters/extractors/extractor_registry.py +44 -0
  77. kiln_ai-0.23.0/kiln_ai/adapters/extractors/extractor_runner.py +112 -0
  78. kiln_ai-0.23.0/kiln_ai/adapters/extractors/litellm_extractor.py +407 -0
  79. kiln_ai-0.23.0/kiln_ai/adapters/extractors/test_base_extractor.py +253 -0
  80. kiln_ai-0.23.0/kiln_ai/adapters/extractors/test_encoding.py +54 -0
  81. kiln_ai-0.23.0/kiln_ai/adapters/extractors/test_extractor_registry.py +187 -0
  82. kiln_ai-0.23.0/kiln_ai/adapters/extractors/test_extractor_runner.py +183 -0
  83. kiln_ai-0.23.0/kiln_ai/adapters/extractors/test_litellm_extractor.py +1425 -0
  84. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/base_finetune.py +2 -6
  85. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/dataset_formatter.py +1 -5
  86. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/fireworks_finetune.py +32 -20
  87. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/openai_finetune.py +14 -4
  88. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/test_dataset_formatter.py +3 -3
  89. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/test_fireworks_tinetune.py +31 -26
  90. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/test_openai_finetune.py +108 -111
  91. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/test_together_finetune.py +2 -6
  92. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/test_vertex_finetune.py +28 -17
  93. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/together_finetune.py +1 -1
  94. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/vertex_finetune.py +11 -1
  95. kiln_ai-0.23.0/kiln_ai/adapters/ml_embedding_model_list.py +617 -0
  96. kiln_ai-0.23.0/kiln_ai/adapters/ml_model_list.py +5293 -0
  97. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/model_adapters/base_adapter.py +72 -40
  98. kiln_ai-0.23.0/kiln_ai/adapters/model_adapters/litellm_adapter.py +720 -0
  99. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/model_adapters/test_base_adapter.py +194 -19
  100. kiln_ai-0.23.0/kiln_ai/adapters/model_adapters/test_litellm_adapter.py +1283 -0
  101. kiln_ai-0.23.0/kiln_ai/adapters/model_adapters/test_litellm_adapter_tools.py +1219 -0
  102. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/model_adapters/test_saving_adapter_results.py +16 -9
  103. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/model_adapters/test_structured_output.py +123 -17
  104. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/ollama_tools.py +69 -12
  105. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/parsers/__init__.py +1 -1
  106. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/parsers/parser_registry.py +0 -2
  107. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/parsers/r1_parser.py +0 -1
  108. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/parsers/request_formatters.py +4 -3
  109. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/parsers/test_r1_parser.py +1 -1
  110. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/provider_tools.py +224 -65
  111. kiln_ai-0.23.0/kiln_ai/adapters/rag/deduplication.py +49 -0
  112. kiln_ai-0.23.0/kiln_ai/adapters/rag/progress.py +252 -0
  113. kiln_ai-0.23.0/kiln_ai/adapters/rag/rag_runners.py +861 -0
  114. kiln_ai-0.23.0/kiln_ai/adapters/rag/test_deduplication.py +195 -0
  115. kiln_ai-0.23.0/kiln_ai/adapters/rag/test_progress.py +785 -0
  116. kiln_ai-0.23.0/kiln_ai/adapters/rag/test_rag_runners.py +2435 -0
  117. kiln_ai-0.23.0/kiln_ai/adapters/remote_config.py +232 -0
  118. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/repair/repair_task.py +2 -7
  119. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/repair/test_repair_task.py +12 -9
  120. kiln_ai-0.23.0/kiln_ai/adapters/reranker_list.py +117 -0
  121. kiln_ai-0.23.0/kiln_ai/adapters/rerankers/base_reranker.py +43 -0
  122. kiln_ai-0.23.0/kiln_ai/adapters/rerankers/litellm_reranker_adapter.py +102 -0
  123. kiln_ai-0.23.0/kiln_ai/adapters/rerankers/reranker_registry.py +26 -0
  124. kiln_ai-0.23.0/kiln_ai/adapters/rerankers/test_base_reranker.py +137 -0
  125. kiln_ai-0.23.0/kiln_ai/adapters/rerankers/test_litellm_reranker_adapter.py +428 -0
  126. kiln_ai-0.23.0/kiln_ai/adapters/rerankers/test_reranker_integration.py +79 -0
  127. kiln_ai-0.23.0/kiln_ai/adapters/rerankers/test_reranker_registry.py +44 -0
  128. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/run_output.py +3 -0
  129. kiln_ai-0.23.0/kiln_ai/adapters/test_adapter_registry.py +834 -0
  130. kiln_ai-0.23.0/kiln_ai/adapters/test_docker_model_runner_tools.py +305 -0
  131. kiln_ai-0.23.0/kiln_ai/adapters/test_ml_embedding_model_list.py +297 -0
  132. kiln_ai-0.23.0/kiln_ai/adapters/test_ml_model_list.py +428 -0
  133. kiln_ai-0.23.0/kiln_ai/adapters/test_ollama_tools.py +380 -0
  134. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/test_prompt_adaptors.py +13 -10
  135. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/test_prompt_builders.py +1 -1
  136. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/test_provider_tools.py +272 -20
  137. kiln_ai-0.23.0/kiln_ai/adapters/test_remote_config.py +1298 -0
  138. kiln_ai-0.23.0/kiln_ai/adapters/test_reranker_list.py +245 -0
  139. kiln_ai-0.23.0/kiln_ai/adapters/vector_store/__init__.py +1 -0
  140. kiln_ai-0.23.0/kiln_ai/adapters/vector_store/base_vector_store_adapter.py +83 -0
  141. kiln_ai-0.23.0/kiln_ai/adapters/vector_store/lancedb_adapter.py +348 -0
  142. kiln_ai-0.23.0/kiln_ai/adapters/vector_store/lancedb_helpers.py +95 -0
  143. kiln_ai-0.23.0/kiln_ai/adapters/vector_store/test_base_vector_store.py +160 -0
  144. kiln_ai-0.23.0/kiln_ai/adapters/vector_store/test_lancedb_adapter.py +1865 -0
  145. kiln_ai-0.23.0/kiln_ai/adapters/vector_store/test_lancedb_helpers.py +174 -0
  146. kiln_ai-0.23.0/kiln_ai/adapters/vector_store/test_vector_store_registry.py +243 -0
  147. kiln_ai-0.23.0/kiln_ai/adapters/vector_store/vector_store_registry.py +53 -0
  148. kiln_ai-0.23.0/kiln_ai/adapters/vector_store_loaders/__init__.py +0 -0
  149. kiln_ai-0.23.0/kiln_ai/adapters/vector_store_loaders/test_lancedb_loader.py +285 -0
  150. kiln_ai-0.23.0/kiln_ai/adapters/vector_store_loaders/test_vector_store_loader.py +761 -0
  151. kiln_ai-0.23.0/kiln_ai/adapters/vector_store_loaders/vector_store_loader.py +104 -0
  152. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/__init__.py +43 -34
  153. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/basemodel.py +306 -31
  154. kiln_ai-0.23.0/kiln_ai/datamodel/chunk.py +221 -0
  155. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/datamodel_enums.py +34 -0
  156. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/dataset_filters.py +5 -4
  157. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/dataset_split.py +5 -3
  158. kiln_ai-0.23.0/kiln_ai/datamodel/embedding.py +58 -0
  159. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/eval.py +125 -10
  160. kiln_ai-0.23.0/kiln_ai/datamodel/external_tool_server.py +464 -0
  161. kiln_ai-0.23.0/kiln_ai/datamodel/extraction.py +298 -0
  162. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/finetune.py +2 -3
  163. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/json_schema.py +50 -20
  164. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/model_cache.py +17 -7
  165. kiln_ai-0.23.0/kiln_ai/datamodel/project.py +67 -0
  166. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/prompt.py +2 -2
  167. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/prompt_id.py +4 -4
  168. kiln_ai-0.23.0/kiln_ai/datamodel/rag.py +84 -0
  169. kiln_ai-0.23.0/kiln_ai/datamodel/registry.py +16 -0
  170. kiln_ai-0.23.0/kiln_ai/datamodel/reranker.py +47 -0
  171. kiln_ai-0.23.0/kiln_ai/datamodel/run_config.py +62 -0
  172. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/task.py +23 -86
  173. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/task_output.py +48 -15
  174. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/task_run.py +42 -2
  175. kiln_ai-0.23.0/kiln_ai/datamodel/test_attachment.py +649 -0
  176. kiln_ai-0.23.0/kiln_ai/datamodel/test_basemodel.py +1121 -0
  177. kiln_ai-0.23.0/kiln_ai/datamodel/test_chunk_models.py +808 -0
  178. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_dataset_split.py +1 -1
  179. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_datasource.py +50 -0
  180. kiln_ai-0.23.0/kiln_ai/datamodel/test_embedding_models.py +439 -0
  181. kiln_ai-0.23.0/kiln_ai/datamodel/test_eval_model.py +1575 -0
  182. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_example_models.py +175 -0
  183. kiln_ai-0.23.0/kiln_ai/datamodel/test_external_tool_server.py +1192 -0
  184. kiln_ai-0.23.0/kiln_ai/datamodel/test_extraction_chunk.py +224 -0
  185. kiln_ai-0.23.0/kiln_ai/datamodel/test_extraction_model.py +590 -0
  186. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_json_schema.py +23 -0
  187. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_model_cache.py +108 -30
  188. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_model_perf.py +1 -1
  189. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_models.py +9 -0
  190. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_prompt_id.py +5 -1
  191. kiln_ai-0.23.0/kiln_ai/datamodel/test_rag.py +658 -0
  192. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_registry.py +8 -3
  193. kiln_ai-0.23.0/kiln_ai/datamodel/test_reranker.py +316 -0
  194. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_task.py +55 -48
  195. kiln_ai-0.23.0/kiln_ai/datamodel/test_tool_id.py +425 -0
  196. kiln_ai-0.23.0/kiln_ai/datamodel/test_vector_store.py +550 -0
  197. kiln_ai-0.23.0/kiln_ai/datamodel/tool_id.py +154 -0
  198. kiln_ai-0.23.0/kiln_ai/datamodel/vector_store.py +123 -0
  199. kiln_ai-0.23.0/kiln_ai/tools/__init__.py +8 -0
  200. kiln_ai-0.23.0/kiln_ai/tools/base_tool.py +116 -0
  201. kiln_ai-0.23.0/kiln_ai/tools/built_in_tools/__init__.py +13 -0
  202. kiln_ai-0.23.0/kiln_ai/tools/built_in_tools/math_tools.py +156 -0
  203. kiln_ai-0.23.0/kiln_ai/tools/built_in_tools/test_math_tools.py +204 -0
  204. kiln_ai-0.23.0/kiln_ai/tools/kiln_task_tool.py +162 -0
  205. kiln_ai-0.23.0/kiln_ai/tools/mcp_server_tool.py +100 -0
  206. kiln_ai-0.23.0/kiln_ai/tools/mcp_session_manager.py +272 -0
  207. kiln_ai-0.23.0/kiln_ai/tools/rag_tools.py +236 -0
  208. kiln_ai-0.23.0/kiln_ai/tools/test_base_tools.py +199 -0
  209. kiln_ai-0.23.0/kiln_ai/tools/test_kiln_task_tool.py +498 -0
  210. kiln_ai-0.23.0/kiln_ai/tools/test_mcp_server_tool.py +460 -0
  211. kiln_ai-0.23.0/kiln_ai/tools/test_mcp_session_manager.py +1560 -0
  212. kiln_ai-0.23.0/kiln_ai/tools/test_rag_tools.py +1396 -0
  213. kiln_ai-0.23.0/kiln_ai/tools/test_tool_registry.py +761 -0
  214. kiln_ai-0.23.0/kiln_ai/tools/tool_registry.py +117 -0
  215. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/__init__.py +3 -0
  216. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/async_job_runner.py +62 -17
  217. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/config.py +42 -2
  218. kiln_ai-0.23.0/kiln_ai/utils/env.py +15 -0
  219. kiln_ai-0.23.0/kiln_ai/utils/filesystem.py +14 -0
  220. kiln_ai-0.23.0/kiln_ai/utils/filesystem_cache.py +72 -0
  221. kiln_ai-0.23.0/kiln_ai/utils/litellm.py +97 -0
  222. kiln_ai-0.23.0/kiln_ai/utils/lock.py +100 -0
  223. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/logging.py +4 -3
  224. kiln_ai-0.23.0/kiln_ai/utils/mime_type.py +38 -0
  225. kiln_ai-0.23.0/kiln_ai/utils/open_ai_types.py +111 -0
  226. kiln_ai-0.23.0/kiln_ai/utils/pdf_utils.py +93 -0
  227. kiln_ai-0.17.0/kiln_ai/datamodel/registry.py → kiln_ai-0.23.0/kiln_ai/utils/project_utils.py +1 -15
  228. kiln_ai-0.23.0/kiln_ai/utils/rag_utils.py +25 -0
  229. kiln_ai-0.23.0/kiln_ai/utils/test_async_job_runner.py +315 -0
  230. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/test_config.py +138 -1
  231. kiln_ai-0.23.0/kiln_ai/utils/test_env.py +142 -0
  232. kiln_ai-0.23.0/kiln_ai/utils/test_filesystem_cache.py +392 -0
  233. kiln_ai-0.23.0/kiln_ai/utils/test_litellm.py +220 -0
  234. kiln_ai-0.23.0/kiln_ai/utils/test_lock.py +185 -0
  235. kiln_ai-0.23.0/kiln_ai/utils/test_mime_type.py +66 -0
  236. kiln_ai-0.23.0/kiln_ai/utils/test_open_ai_types.py +207 -0
  237. kiln_ai-0.23.0/kiln_ai/utils/test_pdf_utils.py +133 -0
  238. kiln_ai-0.23.0/kiln_ai/utils/test_rag_utils.py +158 -0
  239. kiln_ai-0.23.0/kiln_ai/utils/test_uuid.py +111 -0
  240. kiln_ai-0.23.0/kiln_ai/utils/test_validation.py +566 -0
  241. kiln_ai-0.23.0/kiln_ai/utils/uuid.py +9 -0
  242. kiln_ai-0.23.0/kiln_ai/utils/validation.py +99 -0
  243. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/pyproject.toml +12 -3
  244. kiln_ai-0.17.0/docs/kiln_core_docs/search.js +0 -46
  245. kiln_ai-0.17.0/kiln_ai/adapters/adapter_registry.py +0 -199
  246. kiln_ai-0.17.0/kiln_ai/adapters/data_gen/data_gen_prompts.py +0 -73
  247. kiln_ai-0.17.0/kiln_ai/adapters/data_gen/test_data_gen_task.py +0 -334
  248. kiln_ai-0.17.0/kiln_ai/adapters/ml_model_list.py +0 -2333
  249. kiln_ai-0.17.0/kiln_ai/adapters/model_adapters/litellm_adapter.py +0 -412
  250. kiln_ai-0.17.0/kiln_ai/adapters/model_adapters/test_litellm_adapter.py +0 -506
  251. kiln_ai-0.17.0/kiln_ai/adapters/test_adapter_registry.py +0 -234
  252. kiln_ai-0.17.0/kiln_ai/adapters/test_ml_model_list.py +0 -158
  253. kiln_ai-0.17.0/kiln_ai/adapters/test_ollama_tools.py +0 -41
  254. kiln_ai-0.17.0/kiln_ai/datamodel/project.py +0 -23
  255. kiln_ai-0.17.0/kiln_ai/datamodel/test_basemodel.py +0 -555
  256. kiln_ai-0.17.0/kiln_ai/datamodel/test_eval_model.py +0 -635
  257. kiln_ai-0.17.0/kiln_ai/utils/test_async_job_runner.py +0 -199
  258. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/.python-version +0 -0
  259. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/LICENSE.txt +0 -0
  260. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/docs/kiln_core_docs/index.html +0 -0
  261. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/__init__.py +0 -0
  262. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/chat/__init__.py +0 -0
  263. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/data_gen/__init__.py +0 -0
  264. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/eval/__init__.py +0 -0
  265. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/eval/registry.py +0 -0
  266. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/__init__.py +1 -1
  267. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/finetune_registry.py +0 -0
  268. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/fine_tune/test_base_finetune.py +0 -0
  269. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/model_adapters/__init__.py +0 -0
  270. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/model_adapters/litellm_config.py +0 -0
  271. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/parsers/base_parser.py +0 -0
  272. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/parsers/json_parser.py +0 -0
  273. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/parsers/test_json_parser.py +0 -0
  274. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/parsers/test_parser_registry.py +0 -0
  275. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/parsers/test_request_formatters.py +0 -0
  276. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/prompt_builders.py +0 -0
  277. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/adapters/repair/__init__.py +0 -0
  278. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/strict_mode.py +0 -0
  279. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_dataset_filters.py +0 -0
  280. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_nested_save.py +0 -0
  281. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/datamodel/test_output_rating.py +0 -0
  282. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/dataset_import.py +0 -0
  283. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/exhaustive_error.py +0 -0
  284. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/formatting.py +0 -0
  285. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/name_generator.py +0 -0
  286. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/test_dataset_import.py +0 -0
  287. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/kiln_ai/utils/test_name_geneator.py +0 -0
  288. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/setup.cfg +0 -0
  289. {kiln_ai-0.17.0 → kiln_ai-0.23.0}/uv.lock +0 -0
@@ -8,6 +8,8 @@ __pycache__/
8
8
  .coverage
9
9
  **/.venv
10
10
  **/*.egg-info
11
+ node_modules/
12
+ conductor.json
11
13
 
12
14
  libs/core/docs
13
15
  libs/core/build
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kiln-ai
3
- Version: 0.17.0
3
+ Version: 0.23.0
4
4
  Summary: Kiln AI
5
- Project-URL: Homepage, https://getkiln.ai
5
+ Project-URL: Homepage, https://kiln.tech
6
6
  Project-URL: Repository, https://github.com/Kiln-AI/kiln
7
7
  Project-URL: Documentation, https://kiln-ai.github.io/Kiln/kiln_core_docs/kiln_ai.html
8
8
  Project-URL: Issues, https://github.com/Kiln-AI/kiln/issues
@@ -15,14 +15,23 @@ Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Programming Language :: Python :: 3.13
17
17
  Requires-Python: >=3.10
18
+ Requires-Dist: anyio>=4.10.0
18
19
  Requires-Dist: boto3>=1.37.10
19
20
  Requires-Dist: coverage>=7.6.4
21
+ Requires-Dist: exceptiongroup>=1.0.0; python_version < '3.11'
20
22
  Requires-Dist: google-cloud-aiplatform>=1.84.0
23
+ Requires-Dist: google-genai>=1.21.1
21
24
  Requires-Dist: jsonschema>=4.23.0
22
- Requires-Dist: litellm>=1.67.0
25
+ Requires-Dist: lancedb>=0.24.2
26
+ Requires-Dist: litellm>=1.79.3
27
+ Requires-Dist: llama-index-vector-stores-lancedb>=0.4.2
28
+ Requires-Dist: llama-index>=0.13.3
23
29
  Requires-Dist: openai>=1.53.0
24
30
  Requires-Dist: pdoc>=15.0.0
31
+ Requires-Dist: pillow>=11.1.0
25
32
  Requires-Dist: pydantic>=2.9.2
33
+ Requires-Dist: pypdf>=6.0.0
34
+ Requires-Dist: pypdfium2>=4.30.0
26
35
  Requires-Dist: pytest-benchmark>=5.1.0
27
36
  Requires-Dist: pytest-cov>=6.0.0
28
37
  Requires-Dist: pyyaml>=6.0.2
@@ -53,7 +62,7 @@ pip install kiln_ai
53
62
 
54
63
  ## About
55
64
 
56
- This package is the Kiln AI core library. There is also a separate desktop application and server package. Learn more about Kiln AI at [getkiln.ai](https://getkiln.ai) and on Github: [github.com/Kiln-AI/kiln](https://github.com/Kiln-AI/kiln).
65
+ This package is the Kiln AI core library. There is also a separate desktop application and server package. Learn more about Kiln AI at [kiln.tech](https://kiln.tech) and on Github: [github.com/Kiln-AI/kiln](https://github.com/Kiln-AI/kiln).
57
66
 
58
67
  # Guide: Using the Kiln Python Library
59
68
 
@@ -65,6 +74,7 @@ The library has a [comprehensive set of docs](https://kiln-ai.github.io/Kiln/kil
65
74
 
66
75
  ## Table of Contents
67
76
 
77
+ - [Connecting AI Providers](#connecting-ai-providers-openai-openrouter-ollama-etc)
68
78
  - [Using the Kiln Data Model](#using-the-kiln-data-model)
69
79
  - [Understanding the Kiln Data Model](#understanding-the-kiln-data-model)
70
80
  - [Datamodel Overview](#datamodel-overview)
@@ -73,7 +83,12 @@ The library has a [comprehensive set of docs](https://kiln-ai.github.io/Kiln/kil
73
83
  - [Using your Kiln Dataset in a Notebook or Project](#using-your-kiln-dataset-in-a-notebook-or-project)
74
84
  - [Using Kiln Dataset in Pandas](#using-kiln-dataset-in-pandas)
75
85
  - [Building and Running a Kiln Task from Code](#building-and-running-a-kiln-task-from-code)
86
+ - [Tagging Task Runs Programmatically](#tagging-task-runs-programmatically)
76
87
  - [Adding Custom Model or AI Provider from Code](#adding-custom-model-or-ai-provider-from-code)
88
+ - [Taking Kiln RAG to production](#taking-kiln-rag-to-production)
89
+ - [Load a LlamaIndex Vector Store](#load-a-llamaindex-vector-store)
90
+ - [Example: LanceDB Cloud](#example-lancedb-cloud)
91
+ - [Deploy RAG without LlamaIndex](#deploy-rag-without-llamaindex)
77
92
  - [Full API Reference](#full-api-reference)
78
93
 
79
94
  ## Installation
@@ -82,6 +97,12 @@ The library has a [comprehensive set of docs](https://kiln-ai.github.io/Kiln/kil
82
97
  pip install kiln-ai
83
98
  ```
84
99
 
100
+ ## Connecting AI Providers (OpenAI, OpenRouter, Ollama, etc)
101
+
102
+ The easiest way to connect AI providers is to use the Kiln app UI. Once connected in the UI, credentials will be stored to `~/.kiln_ai/settings.yml`, which will be available to the library.
103
+
104
+ For configuring credentials from code or connecting custom servers/model, see [Adding Custom Model or AI Provider from Code](#adding-custom-model-or-ai-provider-from-code).
105
+
85
106
  ## Using the Kiln Data Model
86
107
 
87
108
  ### Understanding the Kiln Data Model
@@ -179,7 +200,10 @@ item = kiln_ai.datamodel.TaskRun(
179
200
  type=kiln_ai.datamodel.DataSourceType.human,
180
201
  properties={"created_by": "Jane Doe"},
181
202
  ),
182
- rating=kiln_ai.datamodel.TaskOutputRating(score=5,type="five_star"),
203
+ rating=kiln_ai.datamodel.TaskOutputRating(
204
+ value=5,
205
+ type=kiln_ai.datamodel.datamodel_enums.five_star,
206
+ ),
183
207
  ),
184
208
  )
185
209
  item.save_to_file()
@@ -270,14 +294,33 @@ for run in task.runs():
270
294
 
271
295
  ```
272
296
 
297
+ ## Tagging Task Runs Programmatically
298
+
299
+ You can also tag your Kiln Task runs programmatically:
300
+
301
+ ```py
302
+ # Load your Kiln Task from disk
303
+ task_path = "/Users/youruser/Kiln Projects/test project/tasks/632780983478 - Joke Generator/task.kiln"
304
+ task = kiln_ai.datamodel.Task.load_from_file(task_path)
305
+
306
+ for run in task.runs():
307
+ # Parse the task output from JSON
308
+ output = json.loads(run.output.output)
309
+
310
+ # Add a tag if the punchline is unusually short
311
+ if len(output["punchline"]) < 100:
312
+ run.tags.append("very_short")
313
+ run.save_to_file() # Persist the updated tags
314
+ ```
315
+
273
316
  ### Adding Custom Model or AI Provider from Code
274
317
 
275
318
  You can add additional AI models and providers to Kiln.
276
319
 
277
320
  See our docs for more information, including how to add these from the UI:
278
321
 
279
- - [Custom Models From Existing Providers](https://docs.getkiln.ai/docs/models-and-ai-providers#custom-models-from-existing-providers)
280
- - [Custom OpenAI Compatible Servers](https://docs.getkiln.ai/docs/models-and-ai-providers#custom-openai-compatible-servers)
322
+ - [Custom Models From Existing Providers](https://docs.kiln.tech/docs/models-and-ai-providers#custom-models-from-existing-providers)
323
+ - [Custom OpenAI Compatible Servers](https://docs.kiln.tech/docs/models-and-ai-providers#custom-openai-compatible-servers)
281
324
 
282
325
  You can also add these from code. The kiln_ai.utils.Config class helps you manage the Kiln config file (stored at `~/.kiln_settings/config.yaml`):
283
326
 
@@ -313,6 +356,78 @@ custom_model_ids.append(new_model)
313
356
  Config.shared().custom_models = custom_model_ids
314
357
  ```
315
358
 
359
+ ## Taking Kiln RAG to production
360
+
361
+ When you're ready to deploy your RAG system, you can export your processed documents to any vector store supported by LlamaIndex. This allows you to use your Kiln-configured chunking and embedding settings in production.
362
+
363
+ ### Load a LlamaIndex Vector Store
364
+
365
+ Kiln provides a `VectorStoreLoader` that yields your processed document chunks as LlamaIndex `TextNode` objects. These nodes contain the same metadata, chunking and embedding data as your Kiln Search Tool configuration.
366
+
367
+ ```py
368
+ from kiln_ai.datamodel import Project
369
+ from kiln_ai.datamodel.rag import RagConfig
370
+ from kiln_ai.adapters.vector_store_loaders import VectorStoreLoader
371
+
372
+ # Load your project and RAG configuration
373
+ project = Project.load_from_file("path/to/your/project.kiln")
374
+ rag_config = RagConfig.from_id_and_parent_path("rag-config-id", project.path)
375
+
376
+ # Create the loader
377
+ loader = VectorStoreLoader(project=project, rag_config=rag_config)
378
+
379
+ # Export chunks to any LlamaIndex vector store
380
+ async for batch in loader.iter_llama_index_nodes(batch_size=10):
381
+ # Insert into your chosen vector store
382
+ # Examples: LanceDB, Pinecone, Chroma, Qdrant, etc.
383
+ pass
384
+ ```
385
+
386
+ **Supported Vector Stores:** LlamaIndex supports 20+ vector stores including LanceDB, Pinecone, Weaviate, Chroma, Qdrant, and more. See the [full list](https://developers.llamaindex.ai/python/framework/module_guides/storing/vector_stores/).
387
+
388
+ ### Example: LanceDB Cloud
389
+
390
+ Internally Kiln uses LanceDB. By using LanceDB cloud you'll get the same indexing behaviour as in app.
391
+
392
+ Here's a complete example using LanceDB Cloud:
393
+
394
+ ```py
395
+ from kiln_ai.datamodel import Project
396
+ from kiln_ai.datamodel.rag import RagConfig
397
+ from kiln_ai.datamodel.vector_store import VectorStoreConfig
398
+ from kiln_ai.adapters.vector_store_loaders import VectorStoreLoader
399
+ from kiln_ai.adapters.vector_store.lancedb_adapter import lancedb_construct_from_config
400
+
401
+ # Load configurations
402
+ project = Project.load_from_file("path/to/your/project.kiln")
403
+ rag_config = RagConfig.from_id_and_parent_path("rag-config-id", project.path)
404
+ vector_store_config = VectorStoreConfig.from_id_and_parent_path(
405
+ rag_config.vector_store_config_id, project.path,
406
+ )
407
+
408
+ # Create LanceDB vector store
409
+ lancedb_store = lancedb_construct_from_config(
410
+ vector_store_config=vector_store_config,
411
+ uri="db://my-project",
412
+ api_key="sk_...",
413
+ region="us-east-1",
414
+ table_name="my-documents", # Created automatically
415
+ )
416
+
417
+ # Export and insert your documents
418
+ loader = VectorStoreLoader(project=project, rag_config=rag_config)
419
+ async for batch in loader.iter_llama_index_nodes(batch_size=100):
420
+ await lancedb_store.async_add(batch)
421
+
422
+ print("Documents successfully exported to LanceDB!")
423
+ ```
424
+
425
+ After export, query your data using [LlamaIndex](https://developers.llamaindex.ai/python/framework-api-reference/storage/vector_store/lancedb/) or the [LanceDB client](https://lancedb.github.io/lancedb/).
426
+
427
+ ### Deploy RAG without LlamaIndex
428
+
429
+ While Kiln is designed for deploying to LlamaIndex, you don't need to use it. The `iter_llama_index_nodes` returns a `TextNode` object which includes all the data you need to build a RAG index in any stack: embedding, text, document name, chunk ID, etc.
430
+
316
431
  ## Full API Reference
317
432
 
318
433
  The library can do a lot more than the examples we've shown here.
@@ -20,7 +20,7 @@ pip install kiln_ai
20
20
 
21
21
  ## About
22
22
 
23
- This package is the Kiln AI core library. There is also a separate desktop application and server package. Learn more about Kiln AI at [getkiln.ai](https://getkiln.ai) and on Github: [github.com/Kiln-AI/kiln](https://github.com/Kiln-AI/kiln).
23
+ This package is the Kiln AI core library. There is also a separate desktop application and server package. Learn more about Kiln AI at [kiln.tech](https://kiln.tech) and on Github: [github.com/Kiln-AI/kiln](https://github.com/Kiln-AI/kiln).
24
24
 
25
25
  # Guide: Using the Kiln Python Library
26
26
 
@@ -32,6 +32,7 @@ The library has a [comprehensive set of docs](https://kiln-ai.github.io/Kiln/kil
32
32
 
33
33
  ## Table of Contents
34
34
 
35
+ - [Connecting AI Providers](#connecting-ai-providers-openai-openrouter-ollama-etc)
35
36
  - [Using the Kiln Data Model](#using-the-kiln-data-model)
36
37
  - [Understanding the Kiln Data Model](#understanding-the-kiln-data-model)
37
38
  - [Datamodel Overview](#datamodel-overview)
@@ -40,7 +41,12 @@ The library has a [comprehensive set of docs](https://kiln-ai.github.io/Kiln/kil
40
41
  - [Using your Kiln Dataset in a Notebook or Project](#using-your-kiln-dataset-in-a-notebook-or-project)
41
42
  - [Using Kiln Dataset in Pandas](#using-kiln-dataset-in-pandas)
42
43
  - [Building and Running a Kiln Task from Code](#building-and-running-a-kiln-task-from-code)
44
+ - [Tagging Task Runs Programmatically](#tagging-task-runs-programmatically)
43
45
  - [Adding Custom Model or AI Provider from Code](#adding-custom-model-or-ai-provider-from-code)
46
+ - [Taking Kiln RAG to production](#taking-kiln-rag-to-production)
47
+ - [Load a LlamaIndex Vector Store](#load-a-llamaindex-vector-store)
48
+ - [Example: LanceDB Cloud](#example-lancedb-cloud)
49
+ - [Deploy RAG without LlamaIndex](#deploy-rag-without-llamaindex)
44
50
  - [Full API Reference](#full-api-reference)
45
51
 
46
52
  ## Installation
@@ -49,6 +55,12 @@ The library has a [comprehensive set of docs](https://kiln-ai.github.io/Kiln/kil
49
55
  pip install kiln-ai
50
56
  ```
51
57
 
58
+ ## Connecting AI Providers (OpenAI, OpenRouter, Ollama, etc)
59
+
60
+ The easiest way to connect AI providers is to use the Kiln app UI. Once connected in the UI, credentials will be stored to `~/.kiln_ai/settings.yml`, which will be available to the library.
61
+
62
+ For configuring credentials from code or connecting custom servers/model, see [Adding Custom Model or AI Provider from Code](#adding-custom-model-or-ai-provider-from-code).
63
+
52
64
  ## Using the Kiln Data Model
53
65
 
54
66
  ### Understanding the Kiln Data Model
@@ -146,7 +158,10 @@ item = kiln_ai.datamodel.TaskRun(
146
158
  type=kiln_ai.datamodel.DataSourceType.human,
147
159
  properties={"created_by": "Jane Doe"},
148
160
  ),
149
- rating=kiln_ai.datamodel.TaskOutputRating(score=5,type="five_star"),
161
+ rating=kiln_ai.datamodel.TaskOutputRating(
162
+ value=5,
163
+ type=kiln_ai.datamodel.datamodel_enums.five_star,
164
+ ),
150
165
  ),
151
166
  )
152
167
  item.save_to_file()
@@ -237,14 +252,33 @@ for run in task.runs():
237
252
 
238
253
  ```
239
254
 
255
+ ## Tagging Task Runs Programmatically
256
+
257
+ You can also tag your Kiln Task runs programmatically:
258
+
259
+ ```py
260
+ # Load your Kiln Task from disk
261
+ task_path = "/Users/youruser/Kiln Projects/test project/tasks/632780983478 - Joke Generator/task.kiln"
262
+ task = kiln_ai.datamodel.Task.load_from_file(task_path)
263
+
264
+ for run in task.runs():
265
+ # Parse the task output from JSON
266
+ output = json.loads(run.output.output)
267
+
268
+ # Add a tag if the punchline is unusually short
269
+ if len(output["punchline"]) < 100:
270
+ run.tags.append("very_short")
271
+ run.save_to_file() # Persist the updated tags
272
+ ```
273
+
240
274
  ### Adding Custom Model or AI Provider from Code
241
275
 
242
276
  You can add additional AI models and providers to Kiln.
243
277
 
244
278
  See our docs for more information, including how to add these from the UI:
245
279
 
246
- - [Custom Models From Existing Providers](https://docs.getkiln.ai/docs/models-and-ai-providers#custom-models-from-existing-providers)
247
- - [Custom OpenAI Compatible Servers](https://docs.getkiln.ai/docs/models-and-ai-providers#custom-openai-compatible-servers)
280
+ - [Custom Models From Existing Providers](https://docs.kiln.tech/docs/models-and-ai-providers#custom-models-from-existing-providers)
281
+ - [Custom OpenAI Compatible Servers](https://docs.kiln.tech/docs/models-and-ai-providers#custom-openai-compatible-servers)
248
282
 
249
283
  You can also add these from code. The kiln_ai.utils.Config class helps you manage the Kiln config file (stored at `~/.kiln_settings/config.yaml`):
250
284
 
@@ -280,6 +314,78 @@ custom_model_ids.append(new_model)
280
314
  Config.shared().custom_models = custom_model_ids
281
315
  ```
282
316
 
317
+ ## Taking Kiln RAG to production
318
+
319
+ When you're ready to deploy your RAG system, you can export your processed documents to any vector store supported by LlamaIndex. This allows you to use your Kiln-configured chunking and embedding settings in production.
320
+
321
+ ### Load a LlamaIndex Vector Store
322
+
323
+ Kiln provides a `VectorStoreLoader` that yields your processed document chunks as LlamaIndex `TextNode` objects. These nodes contain the same metadata, chunking and embedding data as your Kiln Search Tool configuration.
324
+
325
+ ```py
326
+ from kiln_ai.datamodel import Project
327
+ from kiln_ai.datamodel.rag import RagConfig
328
+ from kiln_ai.adapters.vector_store_loaders import VectorStoreLoader
329
+
330
+ # Load your project and RAG configuration
331
+ project = Project.load_from_file("path/to/your/project.kiln")
332
+ rag_config = RagConfig.from_id_and_parent_path("rag-config-id", project.path)
333
+
334
+ # Create the loader
335
+ loader = VectorStoreLoader(project=project, rag_config=rag_config)
336
+
337
+ # Export chunks to any LlamaIndex vector store
338
+ async for batch in loader.iter_llama_index_nodes(batch_size=10):
339
+ # Insert into your chosen vector store
340
+ # Examples: LanceDB, Pinecone, Chroma, Qdrant, etc.
341
+ pass
342
+ ```
343
+
344
+ **Supported Vector Stores:** LlamaIndex supports 20+ vector stores including LanceDB, Pinecone, Weaviate, Chroma, Qdrant, and more. See the [full list](https://developers.llamaindex.ai/python/framework/module_guides/storing/vector_stores/).
345
+
346
+ ### Example: LanceDB Cloud
347
+
348
+ Internally Kiln uses LanceDB. By using LanceDB cloud you'll get the same indexing behaviour as in app.
349
+
350
+ Here's a complete example using LanceDB Cloud:
351
+
352
+ ```py
353
+ from kiln_ai.datamodel import Project
354
+ from kiln_ai.datamodel.rag import RagConfig
355
+ from kiln_ai.datamodel.vector_store import VectorStoreConfig
356
+ from kiln_ai.adapters.vector_store_loaders import VectorStoreLoader
357
+ from kiln_ai.adapters.vector_store.lancedb_adapter import lancedb_construct_from_config
358
+
359
+ # Load configurations
360
+ project = Project.load_from_file("path/to/your/project.kiln")
361
+ rag_config = RagConfig.from_id_and_parent_path("rag-config-id", project.path)
362
+ vector_store_config = VectorStoreConfig.from_id_and_parent_path(
363
+ rag_config.vector_store_config_id, project.path,
364
+ )
365
+
366
+ # Create LanceDB vector store
367
+ lancedb_store = lancedb_construct_from_config(
368
+ vector_store_config=vector_store_config,
369
+ uri="db://my-project",
370
+ api_key="sk_...",
371
+ region="us-east-1",
372
+ table_name="my-documents", # Created automatically
373
+ )
374
+
375
+ # Export and insert your documents
376
+ loader = VectorStoreLoader(project=project, rag_config=rag_config)
377
+ async for batch in loader.iter_llama_index_nodes(batch_size=100):
378
+ await lancedb_store.async_add(batch)
379
+
380
+ print("Documents successfully exported to LanceDB!")
381
+ ```
382
+
383
+ After export, query your data using [LlamaIndex](https://developers.llamaindex.ai/python/framework-api-reference/storage/vector_store/lancedb/) or the [LanceDB client](https://lancedb.github.io/lancedb/).
384
+
385
+ ### Deploy RAG without LlamaIndex
386
+
387
+ While Kiln is designed for deploying to LlamaIndex, you don't need to use it. The `iter_llama_index_nodes` returns a `TextNode` object which includes all the data you need to build a RAG index in any stack: embedding, text, document name, chunk ID, etc.
388
+
283
389
  ## Full API Reference
284
390
 
285
391
  The library can do a lot more than the examples we've shown here.
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.data_gen</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.eval</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.eval</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.eval</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.eval</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.fine_tune</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.fine_tune</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.fine_tune</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.fine_tune</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.model_adapters</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.model_adapters</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters.repair</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.adapters</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.datamodel</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.datamodel</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>
@@ -22,7 +22,7 @@
22
22
  <path fill-rule="evenodd" d="M4.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H14.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3z"/>
23
23
  </svg> &nbsp;kiln_ai.datamodel</a>
24
24
 
25
- <a href="https://getkiln.ai"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
25
+ <a href="https://kiln.tech"> <img src="https://github.com/user-attachments/assets/046f44ae-28cf-4c78-85c3-c3e5ad744fd7" class="logo" alt="project logo"/>
26
26
  </a>
27
27
  <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
28
28
  pattern=".+" required>