llms-py 3.0.14__tar.gz → 3.0.16__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.14/llms_py.egg-info → llms_py-3.0.16}/PKG-INFO +1 -1
  2. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/app/ui/threadStore.mjs +10 -3
  3. llms_py-3.0.16/llms/extensions/computer/README.md +96 -0
  4. llms_py-3.0.16/llms/extensions/computer/__init__.py +59 -0
  5. {llms_py-3.0.14/llms/extensions/computer_use → llms_py-3.0.16/llms/extensions/computer}/bash.py +2 -2
  6. {llms_py-3.0.14/llms/extensions/computer_use → llms_py-3.0.16/llms/extensions/computer}/edit.py +10 -14
  7. llms_py-3.0.16/llms/extensions/computer/filesystem.py +542 -0
  8. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/__init__.py +0 -38
  9. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/providers/google.py +57 -30
  10. llms_py-3.0.16/llms/extensions/skills/LICENSE +202 -0
  11. llms_py-3.0.16/llms/extensions/skills/__init__.py +130 -0
  12. llms_py-3.0.16/llms/extensions/skills/errors.py +25 -0
  13. llms_py-3.0.16/llms/extensions/skills/models.py +39 -0
  14. llms_py-3.0.16/llms/extensions/skills/parser.py +178 -0
  15. llms_py-3.0.16/llms/extensions/skills/ui/index.mjs +362 -0
  16. llms_py-3.0.16/llms/extensions/skills/ui/skills/create-plan/SKILL.md +74 -0
  17. llms_py-3.0.16/llms/extensions/skills/validator.py +177 -0
  18. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/system_prompts/ui/index.mjs +6 -10
  19. llms_py-3.0.16/llms/extensions/tools/__init__.py +67 -0
  20. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/tools/ui/index.mjs +93 -5
  21. {llms_py-3.0.14 → llms_py-3.0.16}/llms/main.py +215 -35
  22. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/ai.mjs +1 -1
  23. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/app.css +527 -22
  24. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/ctx.mjs +53 -6
  25. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/modules/chat/ChatBody.mjs +186 -24
  26. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/modules/chat/index.mjs +107 -103
  27. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/tailwind.input.css +10 -0
  28. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/utils.mjs +25 -1
  29. {llms_py-3.0.14 → llms_py-3.0.16/llms_py.egg-info}/PKG-INFO +1 -1
  30. {llms_py-3.0.14 → llms_py-3.0.16}/llms_py.egg-info/SOURCES.txt +17 -7
  31. {llms_py-3.0.14 → llms_py-3.0.16}/pyproject.toml +1 -1
  32. {llms_py-3.0.14 → llms_py-3.0.16}/setup.py +1 -1
  33. {llms_py-3.0.14 → llms_py-3.0.16}/tests/test_utils.py +66 -14
  34. llms_py-3.0.14/llms/extensions/computer_use/__init__.py +0 -27
  35. llms_py-3.0.14/llms/extensions/tools/__init__.py +0 -144
  36. {llms_py-3.0.14 → llms_py-3.0.16}/LICENSE +0 -0
  37. {llms_py-3.0.14 → llms_py-3.0.16}/MANIFEST.in +0 -0
  38. {llms_py-3.0.14 → llms_py-3.0.16}/README.md +0 -0
  39. {llms_py-3.0.14 → llms_py-3.0.16}/llms/__init__.py +0 -0
  40. {llms_py-3.0.14 → llms_py-3.0.16}/llms/__main__.py +0 -0
  41. {llms_py-3.0.14 → llms_py-3.0.16}/llms/db.py +0 -0
  42. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/analytics/ui/index.mjs +0 -0
  43. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/app/README.md +0 -0
  44. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/app/__init__.py +0 -0
  45. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/app/db.py +0 -0
  46. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/app/ui/Recents.mjs +0 -0
  47. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/app/ui/index.mjs +0 -0
  48. {llms_py-3.0.14/llms/extensions/computer_use → llms_py-3.0.16/llms/extensions/computer}/base.py +0 -0
  49. {llms_py-3.0.14/llms/extensions/computer_use → llms_py-3.0.16/llms/extensions/computer}/computer.py +0 -0
  50. {llms_py-3.0.14/llms/extensions/computer_use → llms_py-3.0.16/llms/extensions/computer}/platform.py +0 -0
  51. {llms_py-3.0.14/llms/extensions/computer_use → llms_py-3.0.16/llms/extensions/computer}/run.py +0 -0
  52. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/CALCULATOR.md +0 -0
  53. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/addon/edit/closebrackets.js +0 -0
  54. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/addon/edit/closetag.js +0 -0
  55. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/addon/edit/continuelist.js +0 -0
  56. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/addon/edit/matchbrackets.js +0 -0
  57. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/addon/edit/matchtags.js +0 -0
  58. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/addon/edit/trailingspace.js +0 -0
  59. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/addon/selection/active-line.js +0 -0
  60. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/addon/selection/mark-selection.js +0 -0
  61. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/addon/selection/selection-pointer.js +0 -0
  62. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/codemirror.css +0 -0
  63. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/codemirror.js +0 -0
  64. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/doc/docs.css +0 -0
  65. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/doc/source_sans.woff +0 -0
  66. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/mode/clike/clike.js +0 -0
  67. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/mode/javascript/index.html +0 -0
  68. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/mode/javascript/javascript.js +0 -0
  69. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/mode/javascript/typescript.html +0 -0
  70. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/mode/python/python.js +0 -0
  71. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/theme/dracula.css +0 -0
  72. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/codemirror/theme/mocha.css +0 -0
  73. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/core_tools/ui/index.mjs +0 -0
  74. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/gallery/README.md +0 -0
  75. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/gallery/__init__.py +0 -0
  76. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/gallery/db.py +0 -0
  77. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/gallery/ui/index.mjs +0 -0
  78. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/README.md +0 -0
  79. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/__init__.py +0 -0
  80. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/README.md +0 -0
  81. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/auto-render.js +0 -0
  82. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/auto-render.min.js +0 -0
  83. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/auto-render.mjs +0 -0
  84. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/copy-tex.js +0 -0
  85. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/copy-tex.min.js +0 -0
  86. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/copy-tex.mjs +0 -0
  87. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/mathtex-script-type.js +0 -0
  88. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/mathtex-script-type.min.js +0 -0
  89. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/mathtex-script-type.mjs +0 -0
  90. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/mhchem.js +0 -0
  91. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/mhchem.min.js +0 -0
  92. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/mhchem.mjs +0 -0
  93. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/render-a11y-string.js +0 -0
  94. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/render-a11y-string.min.js +0 -0
  95. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/contrib/render-a11y-string.mjs +0 -0
  96. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.ttf +0 -0
  97. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff +0 -0
  98. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  99. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  100. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  101. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  102. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  103. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  104. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  105. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  106. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  107. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  108. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  109. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  110. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  111. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.ttf +0 -0
  112. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff +0 -0
  113. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff2 +0 -0
  114. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  115. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  116. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  117. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.ttf +0 -0
  118. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff +0 -0
  119. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff2 +0 -0
  120. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.ttf +0 -0
  121. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff +0 -0
  122. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff2 +0 -0
  123. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  124. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  125. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  126. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.ttf +0 -0
  127. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff +0 -0
  128. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff2 +0 -0
  129. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  130. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  131. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  132. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  133. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  134. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  135. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  136. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  137. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  138. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.ttf +0 -0
  139. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff +0 -0
  140. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff2 +0 -0
  141. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.ttf +0 -0
  142. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff +0 -0
  143. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  144. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.ttf +0 -0
  145. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff +0 -0
  146. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  147. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.ttf +0 -0
  148. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff +0 -0
  149. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  150. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.ttf +0 -0
  151. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff +0 -0
  152. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  153. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  154. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  155. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  156. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/index.mjs +0 -0
  157. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/katex-swap.css +0 -0
  158. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/katex-swap.min.css +0 -0
  159. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/katex.css +0 -0
  160. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/katex.js +0 -0
  161. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/katex.min.css +0 -0
  162. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/katex.min.js +0 -0
  163. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/katex.min.mjs +0 -0
  164. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/katex/ui/katex.mjs +0 -0
  165. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/providers/__init__.py +0 -0
  166. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/providers/anthropic.py +0 -0
  167. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/providers/cerebras.py +0 -0
  168. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/providers/chutes.py +0 -0
  169. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/providers/nvidia.py +0 -0
  170. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/providers/openai.py +0 -0
  171. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/providers/openrouter.py +0 -0
  172. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/providers/zai.py +0 -0
  173. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/system_prompts/README.md +0 -0
  174. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/system_prompts/__init__.py +0 -0
  175. {llms_py-3.0.14 → llms_py-3.0.16}/llms/extensions/system_prompts/ui/prompts.json +0 -0
  176. {llms_py-3.0.14 → llms_py-3.0.16}/llms/index.html +0 -0
  177. {llms_py-3.0.14 → llms_py-3.0.16}/llms/llms.json +0 -0
  178. {llms_py-3.0.14 → llms_py-3.0.16}/llms/providers-extra.json +0 -0
  179. {llms_py-3.0.14 → llms_py-3.0.16}/llms/providers.json +0 -0
  180. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/App.mjs +0 -0
  181. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/fav.svg +0 -0
  182. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/index.mjs +0 -0
  183. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/chart.js +0 -0
  184. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/charts.mjs +0 -0
  185. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/color.js +0 -0
  186. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/highlight.min.mjs +0 -0
  187. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/idb.min.mjs +0 -0
  188. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/marked.min.mjs +0 -0
  189. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/servicestack-client.mjs +0 -0
  190. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/servicestack-vue.mjs +0 -0
  191. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/vue-router.min.mjs +0 -0
  192. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/vue.min.mjs +0 -0
  193. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/lib/vue.mjs +0 -0
  194. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/markdown.mjs +0 -0
  195. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/modules/chat/SettingsDialog.mjs +0 -0
  196. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/modules/icons.mjs +0 -0
  197. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/modules/layout.mjs +0 -0
  198. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/modules/model-selector.mjs +0 -0
  199. {llms_py-3.0.14 → llms_py-3.0.16}/llms/ui/typography.css +0 -0
  200. {llms_py-3.0.14 → llms_py-3.0.16}/llms_py.egg-info/dependency_links.txt +0 -0
  201. {llms_py-3.0.14 → llms_py-3.0.16}/llms_py.egg-info/entry_points.txt +0 -0
  202. {llms_py-3.0.14 → llms_py-3.0.16}/llms_py.egg-info/not-zip-safe +0 -0
  203. {llms_py-3.0.14 → llms_py-3.0.16}/llms_py.egg-info/requires.txt +0 -0
  204. {llms_py-3.0.14 → llms_py-3.0.16}/llms_py.egg-info/top_level.txt +0 -0
  205. {llms_py-3.0.14 → llms_py-3.0.16}/requirements.txt +0 -0
  206. {llms_py-3.0.14 → llms_py-3.0.16}/setup.cfg +0 -0
  207. {llms_py-3.0.14 → llms_py-3.0.16}/tests/test_async.py +0 -0
  208. {llms_py-3.0.14 → llms_py-3.0.16}/tests/test_config.py +0 -0
  209. {llms_py-3.0.14 → llms_py-3.0.16}/tests/test_core_tools_direct.py +0 -0
  210. {llms_py-3.0.14 → llms_py-3.0.16}/tests/test_extensions.py +0 -0
  211. {llms_py-3.0.14 → llms_py-3.0.16}/tests/test_gemini_tool_calling.py +0 -0
  212. {llms_py-3.0.14 → llms_py-3.0.16}/tests/test_gemini_upload.py +0 -0
  213. {llms_py-3.0.14 → llms_py-3.0.16}/tests/test_integration.py +0 -0
  214. {llms_py-3.0.14 → llms_py-3.0.16}/tests/test_interleaved_thinking.py +0 -0
  215. {llms_py-3.0.14 → llms_py-3.0.16}/tests/test_provider_checks.py +0 -0
  216. {llms_py-3.0.14 → llms_py-3.0.16}/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.14
3
+ Version: 3.0.16
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
@@ -354,11 +354,11 @@ async function startNewThread({ title, model, tools, redirect }) {
354
354
  async function queueChat(ctxRequest, options = {}) {
355
355
  if (!ctxRequest.request) return ctx.createErrorResult({ message: 'No request provided' })
356
356
  if (!ctxRequest.thread) return ctx.createErrorResult({ message: 'No thread provided' })
357
- if (!ctxRequest.request.metadata) {
358
- ctxRequest.request.metadata = {}
359
- }
357
+ ctxRequest = ctx.createChatContext(ctxRequest)
360
358
  ctx.chatRequestFilters.forEach(f => f(ctxRequest))
361
359
  const { thread, request } = ctxRequest
360
+ ctx.completeChatContext(ctxRequest)
361
+
362
362
  const api = await ctx.postJson(`/ext/app/threads/${thread.id}/chat`, {
363
363
  ...options,
364
364
  body: typeof request == 'string'
@@ -381,6 +381,12 @@ async function loadThreadDetails(id, opt = null) {
381
381
  return threadDetails.value[id]
382
382
  }
383
383
 
384
+ function getCurrentThreadSystemPrompt() {
385
+ return currentThread.value?.systemPrompt
386
+ ?? currentThread.value?.messages?.find(m => m.role == 'system')?.content
387
+ ?? ''
388
+ }
389
+
384
390
  // Export the store
385
391
  export function useThreadStore() {
386
392
  return {
@@ -391,6 +397,7 @@ export function useThreadStore() {
391
397
  groupedThreads,
392
398
 
393
399
  // Actions
400
+ getCurrentThreadSystemPrompt,
394
401
  query,
395
402
  createThread,
396
403
  updateThread,
@@ -0,0 +1,96 @@
1
+ # Computer Use Tools
2
+
3
+ This extension provides a set of tools that allow an Agent to interact with a computer environment in a way similar to a human user. It includes capabilities for screen interaction (mouse/keyboard), shell execution, and file editing. Based on [Anthropic's computer use tools](https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo).
4
+
5
+ ## Available Tools
6
+
7
+ ### 1. Computer Tool (`computer`)
8
+ Allows interaction with the screen, keyboard, and mouse.
9
+
10
+ **Capabilities:**
11
+ - **Mouse Interaction**: Move cursor, click (left, right, middle, double, triple), click & drag.
12
+ - **Keyboard Interaction**: Type text, press specific keys or key combinations.
13
+ - **Screen**: Take screenshots, get cursor position.
14
+ - **Zooming**: Zoom into specific regions of the screen (Action: `zoom`).
15
+
16
+ **Key Parameters:**
17
+ - `action`: The action to perform (e.g., `mouse_move`, `left_click`, `type`, `screenshot`, `zoom`).
18
+ - `coordinate`: `(x, y)` coordinates for mouse actions.
19
+ - `text`: Text to type.
20
+ - `key`: Key sequence to press (e.g., `Return`, `Control+c`).
21
+ - `region`: `(x0, y0, x1, y1)` region for zooming.
22
+
23
+ ### 2. Bash Tool (`bash`)
24
+ Provides a persistent shell session to execute command-line instructions.
25
+
26
+ **Capabilities:**
27
+ - **Execute Commands**: Run any bash command.
28
+ - **Persistent Session**: State (like environment variables, working directory) is preserved between calls within the same session.
29
+ - **Process Management**: Can restart the session if needed.
30
+ - **Open Files/URLs**: Helper function `open` allows opening files or URLs using the system's default handler (`xdg-open`, `open`, or `start`).
31
+
32
+ **Key Parameters:**
33
+ - `command`: The bash command to execute.
34
+ - `restart`: Boolean to restart the session.
35
+
36
+ ### 3. Edit Tool (`str_replace_editor`)
37
+ A filesystem editor for viewing and modifying files.
38
+
39
+ **Capabilities:**
40
+ - **View**: Read file contents or list directories.
41
+ - **Create**: Create new files with content.
42
+ - **String Replace**: Replace unique strings in a file (robust for LLM editing).
43
+ - **Insert**: Insert text at specific line numbers.
44
+ - **Undo**: Undo the last edit to a file.
45
+
46
+ **Key Parameters:**
47
+ - `command`: The edit command (`view`, `create`, `str_replace`, `insert`, `undo_edit`).
48
+ - `path`: Absolute path to the file or directory.
49
+ - `file_text`: Content for file creation.
50
+ - `old_str` / `new_str`: Strings for replacement.
51
+
52
+ ---
53
+
54
+ ## Capabilities & Workflows
55
+
56
+ These tools are designed to work together to enable complex end-to-end tasks. An Agent can act as a developer, tester, or general user.
57
+
58
+ ### Example: "Build a Tetris web app in a tetris folder, open it then take a screenshot"
59
+
60
+ To achieve this high-level task, the Agent would sequence the tools as follows:
61
+
62
+ 1. **Create the Project Structure**
63
+ * **Tool**: `bash`
64
+ * **Command**: `mkdir -p tetris`
65
+ * *Result*: Creates the folder.
66
+
67
+ 2. **Create the Application Files**
68
+ * **Tool**: `edit` (command: `create`)
69
+ * **Path**: `/path/to/tetris/index.html`
70
+ * **Content**: (HTML code for Tetris game)
71
+ * *Result*: Writes the HTML file.
72
+
73
+ 3. **Open the Application**
74
+ * **Tool**: `bash` (via helper `open`) or `bash` directly.
75
+ * **Command**: `xdg-open /path/to/tetris/index.html` (Linux) or just `python -m http.server` and open localhost.
76
+ * *Result*: Opens the file in the default web browser.
77
+
78
+ 4. **Wait & Verify**
79
+ * **Tool**: `computer`
80
+ * **Action**: `wait` or `screenshot` to see if it loaded.
81
+
82
+ 5. **Take a Screenshot**
83
+ * **Tool**: `computer`
84
+ * **Action**: `screenshot`
85
+ * *Result*: Captures the visual state of the running Tetris app for the user to see.
86
+
87
+ ### How it handles the "Build a Tetris..." request:
88
+ When a user gives the command:
89
+ > "Build a Tetris web app in a tetris folder, open it then take a screenshot"
90
+
91
+ The Agent decomposes this into:
92
+ 1. **"Build... in a tetris folder"** -> Uses `bash` to make the directory and `edit` to write the `index.html` / `style.css` / `script.js` files.
93
+ 2. **"Open it"** -> Uses `bash` to run a server or open the file in a browser.
94
+ 3. **"Take a screenshot"** -> Uses `computer` to verify the visual output.
95
+
96
+ This combination allows the Agent to not just generate code, but **verify** it visually and interactively, closing the loop on development tasks.
@@ -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