llms-py 3.0.15__tar.gz → 3.0.17__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 (216) hide show
  1. {llms_py-3.0.15/llms_py.egg-info → llms_py-3.0.17}/PKG-INFO +1 -1
  2. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/app/__init__.py +0 -1
  3. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/app/db.py +5 -1
  4. llms_py-3.0.17/llms/extensions/computer/__init__.py +59 -0
  5. {llms_py-3.0.15/llms/extensions/computer_use → llms_py-3.0.17/llms/extensions/computer}/bash.py +2 -2
  6. {llms_py-3.0.15/llms/extensions/computer_use → llms_py-3.0.17/llms/extensions/computer}/edit.py +10 -14
  7. llms_py-3.0.17/llms/extensions/computer/filesystem.py +542 -0
  8. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/__init__.py +0 -38
  9. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/providers/cerebras.py +0 -1
  10. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/providers/google.py +57 -30
  11. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/skills/ui/index.mjs +27 -0
  12. llms_py-3.0.17/llms/extensions/tools/__init__.py +67 -0
  13. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/tools/ui/index.mjs +92 -4
  14. {llms_py-3.0.15 → llms_py-3.0.17}/llms/main.py +225 -34
  15. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/ai.mjs +1 -1
  16. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/app.css +491 -0
  17. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/modules/chat/ChatBody.mjs +64 -9
  18. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/modules/chat/index.mjs +103 -91
  19. {llms_py-3.0.15 → llms_py-3.0.17/llms_py.egg-info}/PKG-INFO +1 -1
  20. {llms_py-3.0.15 → llms_py-3.0.17}/llms_py.egg-info/SOURCES.txt +9 -8
  21. {llms_py-3.0.15 → llms_py-3.0.17}/pyproject.toml +1 -1
  22. {llms_py-3.0.15 → llms_py-3.0.17}/setup.py +1 -1
  23. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_utils.py +66 -14
  24. llms_py-3.0.15/llms/extensions/computer_use/__init__.py +0 -27
  25. llms_py-3.0.15/llms/extensions/tools/__init__.py +0 -144
  26. {llms_py-3.0.15 → llms_py-3.0.17}/LICENSE +0 -0
  27. {llms_py-3.0.15 → llms_py-3.0.17}/MANIFEST.in +0 -0
  28. {llms_py-3.0.15 → llms_py-3.0.17}/README.md +0 -0
  29. {llms_py-3.0.15 → llms_py-3.0.17}/llms/__init__.py +0 -0
  30. {llms_py-3.0.15 → llms_py-3.0.17}/llms/__main__.py +0 -0
  31. {llms_py-3.0.15 → llms_py-3.0.17}/llms/db.py +0 -0
  32. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/analytics/ui/index.mjs +0 -0
  33. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/app/README.md +0 -0
  34. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/app/ui/Recents.mjs +0 -0
  35. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/app/ui/index.mjs +0 -0
  36. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/app/ui/threadStore.mjs +0 -0
  37. {llms_py-3.0.15/llms/extensions/computer_use → llms_py-3.0.17/llms/extensions/computer}/README.md +0 -0
  38. {llms_py-3.0.15/llms/extensions/computer_use → llms_py-3.0.17/llms/extensions/computer}/base.py +0 -0
  39. {llms_py-3.0.15/llms/extensions/computer_use → llms_py-3.0.17/llms/extensions/computer}/computer.py +0 -0
  40. {llms_py-3.0.15/llms/extensions/computer_use → llms_py-3.0.17/llms/extensions/computer}/platform.py +0 -0
  41. {llms_py-3.0.15/llms/extensions/computer_use → llms_py-3.0.17/llms/extensions/computer}/run.py +0 -0
  42. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/CALCULATOR.md +0 -0
  43. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/addon/edit/closebrackets.js +0 -0
  44. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/addon/edit/closetag.js +0 -0
  45. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/addon/edit/continuelist.js +0 -0
  46. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/addon/edit/matchbrackets.js +0 -0
  47. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/addon/edit/matchtags.js +0 -0
  48. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/addon/edit/trailingspace.js +0 -0
  49. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/addon/selection/active-line.js +0 -0
  50. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/addon/selection/mark-selection.js +0 -0
  51. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/addon/selection/selection-pointer.js +0 -0
  52. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/codemirror.css +0 -0
  53. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/codemirror.js +0 -0
  54. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/doc/docs.css +0 -0
  55. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/doc/source_sans.woff +0 -0
  56. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/mode/clike/clike.js +0 -0
  57. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/mode/javascript/index.html +0 -0
  58. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/mode/javascript/javascript.js +0 -0
  59. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/mode/javascript/typescript.html +0 -0
  60. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/mode/python/python.js +0 -0
  61. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/theme/dracula.css +0 -0
  62. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/codemirror/theme/mocha.css +0 -0
  63. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/core_tools/ui/index.mjs +0 -0
  64. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/gallery/README.md +0 -0
  65. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/gallery/__init__.py +0 -0
  66. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/gallery/db.py +0 -0
  67. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/gallery/ui/index.mjs +0 -0
  68. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/README.md +0 -0
  69. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/__init__.py +0 -0
  70. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/README.md +0 -0
  71. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/auto-render.js +0 -0
  72. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/auto-render.min.js +0 -0
  73. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/auto-render.mjs +0 -0
  74. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/copy-tex.js +0 -0
  75. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/copy-tex.min.js +0 -0
  76. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/copy-tex.mjs +0 -0
  77. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/mathtex-script-type.js +0 -0
  78. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/mathtex-script-type.min.js +0 -0
  79. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/mathtex-script-type.mjs +0 -0
  80. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/mhchem.js +0 -0
  81. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/mhchem.min.js +0 -0
  82. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/mhchem.mjs +0 -0
  83. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/render-a11y-string.js +0 -0
  84. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/render-a11y-string.min.js +0 -0
  85. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/contrib/render-a11y-string.mjs +0 -0
  86. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.ttf +0 -0
  87. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff +0 -0
  88. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  89. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  90. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  91. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  92. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  93. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  94. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  95. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  96. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  97. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  98. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  99. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  100. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  101. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.ttf +0 -0
  102. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff +0 -0
  103. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff2 +0 -0
  104. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  105. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  106. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  107. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.ttf +0 -0
  108. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff +0 -0
  109. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff2 +0 -0
  110. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.ttf +0 -0
  111. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff +0 -0
  112. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff2 +0 -0
  113. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  114. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  115. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  116. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.ttf +0 -0
  117. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff +0 -0
  118. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff2 +0 -0
  119. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  120. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  121. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  122. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  123. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  124. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  125. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  126. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  127. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  128. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.ttf +0 -0
  129. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff +0 -0
  130. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff2 +0 -0
  131. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.ttf +0 -0
  132. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff +0 -0
  133. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  134. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.ttf +0 -0
  135. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff +0 -0
  136. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  137. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.ttf +0 -0
  138. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff +0 -0
  139. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  140. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.ttf +0 -0
  141. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff +0 -0
  142. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  143. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  144. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  145. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  146. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/index.mjs +0 -0
  147. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/katex-swap.css +0 -0
  148. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/katex-swap.min.css +0 -0
  149. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/katex.css +0 -0
  150. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/katex.js +0 -0
  151. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/katex.min.css +0 -0
  152. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/katex.min.js +0 -0
  153. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/katex.min.mjs +0 -0
  154. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/katex/ui/katex.mjs +0 -0
  155. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/providers/__init__.py +0 -0
  156. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/providers/anthropic.py +0 -0
  157. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/providers/chutes.py +0 -0
  158. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/providers/nvidia.py +0 -0
  159. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/providers/openai.py +0 -0
  160. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/providers/openrouter.py +0 -0
  161. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/providers/zai.py +0 -0
  162. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/skills/LICENSE +0 -0
  163. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/skills/__init__.py +0 -0
  164. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/skills/errors.py +0 -0
  165. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/skills/models.py +0 -0
  166. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/skills/parser.py +0 -0
  167. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/skills/ui/skills/create-plan/SKILL.md +0 -0
  168. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/skills/validator.py +0 -0
  169. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/system_prompts/README.md +0 -0
  170. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/system_prompts/__init__.py +0 -0
  171. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/system_prompts/ui/index.mjs +0 -0
  172. {llms_py-3.0.15 → llms_py-3.0.17}/llms/extensions/system_prompts/ui/prompts.json +0 -0
  173. {llms_py-3.0.15 → llms_py-3.0.17}/llms/index.html +0 -0
  174. {llms_py-3.0.15 → llms_py-3.0.17}/llms/llms.json +0 -0
  175. {llms_py-3.0.15 → llms_py-3.0.17}/llms/providers-extra.json +0 -0
  176. {llms_py-3.0.15 → llms_py-3.0.17}/llms/providers.json +0 -0
  177. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/App.mjs +0 -0
  178. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/ctx.mjs +0 -0
  179. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/fav.svg +0 -0
  180. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/index.mjs +0 -0
  181. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/chart.js +0 -0
  182. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/charts.mjs +0 -0
  183. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/color.js +0 -0
  184. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/highlight.min.mjs +0 -0
  185. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/idb.min.mjs +0 -0
  186. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/marked.min.mjs +0 -0
  187. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/servicestack-client.mjs +0 -0
  188. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/servicestack-vue.mjs +0 -0
  189. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/vue-router.min.mjs +0 -0
  190. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/vue.min.mjs +0 -0
  191. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/lib/vue.mjs +0 -0
  192. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/markdown.mjs +0 -0
  193. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/modules/chat/SettingsDialog.mjs +0 -0
  194. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/modules/icons.mjs +0 -0
  195. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/modules/layout.mjs +0 -0
  196. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/modules/model-selector.mjs +0 -0
  197. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/tailwind.input.css +0 -0
  198. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/typography.css +0 -0
  199. {llms_py-3.0.15 → llms_py-3.0.17}/llms/ui/utils.mjs +0 -0
  200. {llms_py-3.0.15 → llms_py-3.0.17}/llms_py.egg-info/dependency_links.txt +0 -0
  201. {llms_py-3.0.15 → llms_py-3.0.17}/llms_py.egg-info/entry_points.txt +0 -0
  202. {llms_py-3.0.15 → llms_py-3.0.17}/llms_py.egg-info/not-zip-safe +0 -0
  203. {llms_py-3.0.15 → llms_py-3.0.17}/llms_py.egg-info/requires.txt +0 -0
  204. {llms_py-3.0.15 → llms_py-3.0.17}/llms_py.egg-info/top_level.txt +0 -0
  205. {llms_py-3.0.15 → llms_py-3.0.17}/requirements.txt +0 -0
  206. {llms_py-3.0.15 → llms_py-3.0.17}/setup.cfg +0 -0
  207. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_async.py +0 -0
  208. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_config.py +0 -0
  209. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_core_tools_direct.py +0 -0
  210. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_extensions.py +0 -0
  211. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_gemini_tool_calling.py +0 -0
  212. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_gemini_upload.py +0 -0
  213. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_integration.py +0 -0
  214. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_interleaved_thinking.py +0 -0
  215. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_provider_checks.py +0 -0
  216. {llms_py-3.0.15 → llms_py-3.0.17}/tests/test_provider_config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: llms-py
3
- Version: 3.0.15
3
+ Version: 3.0.17
4
4
  Summary: A lightweight CLI tool and OpenAI-compatible server for querying multiple Large Language Model (LLM) providers
5
5
  Home-page: https://github.com/ServiceStack/llms
6
6
  Author: ServiceStack
@@ -199,7 +199,6 @@ def install(ctx):
199
199
  "model": thread.get("model"),
200
200
  "messages": thread.get("messages"),
201
201
  "modalities": thread.get("modalities"),
202
- "systemPrompt": thread.get("systemPrompt"),
203
202
  "tools": thread.get("tools"), # tools request
204
203
  "metadata": metadata,
205
204
  }
@@ -1,5 +1,6 @@
1
1
  import json
2
2
  import os
3
+ import time
3
4
  from datetime import datetime, timedelta
4
5
  from typing import Any, Dict
5
6
 
@@ -344,9 +345,12 @@ class AppDB:
344
345
  else:
345
346
  thread["createdAt"] = now
346
347
  thread["updatedAt"] = now
348
+ initial_timestamp = int(time.time() * 1000) + 1
347
349
  if "messages" in thread:
348
- for m in thread["messages"]:
350
+ for idx, m in enumerate(thread["messages"]):
349
351
  self.ctx.cache_message_inline_data(m)
352
+ if "timestamp" not in m:
353
+ m["timestamp"] = initial_timestamp + idx
350
354
  return with_user(thread, user=user)
351
355
 
352
356
  def create_thread(self, thread: Dict[str, Any], user=None):
@@ -0,0 +1,59 @@
1
+ """
2
+ Anthropic's Computer Use Tools
3
+ https://github.com/anthropics/claude-quickstarts/tree/main/computer-use-demo
4
+ """
5
+
6
+ import os
7
+
8
+ from .bash import open, run_bash
9
+ from .computer import computer
10
+ from .edit import edit
11
+ from .filesystem import (
12
+ create_directory,
13
+ directory_tree,
14
+ edit_file,
15
+ filesystem_init,
16
+ get_file_info,
17
+ list_allowed_directories,
18
+ list_directory,
19
+ list_directory_with_sizes,
20
+ move_file,
21
+ read_media_file,
22
+ read_multiple_files,
23
+ read_text_file,
24
+ search_files,
25
+ write_file,
26
+ )
27
+ from .platform import get_display_num, get_screen_resolution
28
+
29
+ width, height = get_screen_resolution()
30
+ # set enviroment variables
31
+ os.environ["WIDTH"] = str(width)
32
+ os.environ["HEIGHT"] = str(height)
33
+ os.environ["DISPLAY_NUM"] = str(get_display_num())
34
+
35
+
36
+ def install(ctx):
37
+ filesystem_init(ctx)
38
+
39
+ ctx.register_tool(run_bash, group="computer")
40
+ ctx.register_tool(open, group="computer")
41
+ ctx.register_tool(edit, group="computer")
42
+ ctx.register_tool(computer, group="computer")
43
+
44
+ ctx.register_tool(read_text_file, group="filesystem")
45
+ ctx.register_tool(read_media_file, group="filesystem")
46
+ ctx.register_tool(read_multiple_files, group="filesystem")
47
+ ctx.register_tool(write_file, group="filesystem")
48
+ ctx.register_tool(edit_file, group="filesystem")
49
+ ctx.register_tool(create_directory, group="filesystem")
50
+ ctx.register_tool(list_directory, group="filesystem")
51
+ ctx.register_tool(list_directory_with_sizes, group="filesystem")
52
+ ctx.register_tool(directory_tree, group="filesystem")
53
+ ctx.register_tool(move_file, group="filesystem")
54
+ ctx.register_tool(search_files, group="filesystem")
55
+ ctx.register_tool(get_file_info, group="filesystem")
56
+ ctx.register_tool(list_allowed_directories, group="filesystem")
57
+
58
+
59
+ __install__ = install
@@ -158,7 +158,7 @@ async def run_bash(
158
158
  if g_tool is None:
159
159
  g_tool = BashTool20241022()
160
160
 
161
- result = await g_tool(command, restart)
161
+ result = await g_tool(command=command, restart=restart)
162
162
  if isinstance(result, Exception):
163
163
  raise result
164
164
  else:
@@ -182,4 +182,4 @@ async def open(target: Annotated[str, "URL or file path to open"]) -> list[dict[
182
182
  else: # Linux and other Unix-like
183
183
  cmd = ["xdg-open", target]
184
184
 
185
- return await run_bash(" ".join(cmd))
185
+ return await run_bash(command=" ".join(cmd))
@@ -1,6 +1,6 @@
1
1
  from collections import defaultdict
2
2
  from pathlib import Path
3
- from typing import Annotated, Any, Literal, get_args
3
+ from typing import Annotated, Any, List, Literal, get_args
4
4
 
5
5
  from .base import BaseTool, CLIResult, ToolError, ToolResult
6
6
  from .run import maybe_truncate, run
@@ -272,10 +272,10 @@ async def edit(
272
272
  command: Command_20250124,
273
273
  path: Annotated[str, "The absolute path to the file or directory"],
274
274
  file_text: Annotated[str | None, "The content to write to the file (required for create)"] = None,
275
- view_range: Annotated[list[int] | None, "The range of lines to view (e.g. [1, 10])"] = None,
275
+ view_range: Annotated[List[int], "The range of lines to view (e.g. [1, 10])"] = None,
276
276
  old_str: Annotated[str | None, "The string to replace (required for str_replace)"] = None,
277
277
  new_str: Annotated[str | None, "The replacement string (required for str_replace and insert)"] = None,
278
- insert_line: Annotated[int | None, "The line number after which to insert (required for insert)"] = None,
278
+ insert_line: Annotated[int, "The line number after which to insert (required for insert)"] = None,
279
279
  ) -> list[dict[str, Any]]:
280
280
  """
281
281
  An filesystem editor tool that allows the agent to view, create, and edit files.
@@ -284,18 +284,14 @@ async def edit(
284
284
  if g_tool is None:
285
285
  g_tool = EditTool20250124()
286
286
 
287
- view_range_values = None
288
- if view_range:
289
- view_range_values = [int(x) for x in view_range]
290
-
291
287
  result = await g_tool(
292
- command,
293
- path if path else None,
294
- file_text if file_text else None,
295
- view_range_values,
296
- old_str if old_str else None,
297
- new_str if new_str else None,
298
- int(insert_line) if insert_line else None,
288
+ command=command,
289
+ path=path if path else None,
290
+ file_text=file_text if file_text else None,
291
+ view_range=view_range,
292
+ old_str=old_str if old_str else None,
293
+ new_str=new_str if new_str else None,
294
+ insert_line=int(insert_line) if insert_line else None,
299
295
  )
300
296
  if isinstance(result, Exception):
301
297
  raise result