chatmcp-cli 0.1.0__py3-none-any.whl

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 (228) hide show
  1. aider/__init__.py +20 -0
  2. aider/__main__.py +4 -0
  3. aider/_version.py +21 -0
  4. aider/analytics.py +250 -0
  5. aider/args.py +926 -0
  6. aider/args_formatter.py +228 -0
  7. aider/coders/__init__.py +34 -0
  8. aider/coders/architect_coder.py +48 -0
  9. aider/coders/architect_prompts.py +40 -0
  10. aider/coders/ask_coder.py +9 -0
  11. aider/coders/ask_prompts.py +35 -0
  12. aider/coders/base_coder.py +2483 -0
  13. aider/coders/base_prompts.py +60 -0
  14. aider/coders/chat_chunks.py +64 -0
  15. aider/coders/context_coder.py +53 -0
  16. aider/coders/context_prompts.py +75 -0
  17. aider/coders/editblock_coder.py +657 -0
  18. aider/coders/editblock_fenced_coder.py +10 -0
  19. aider/coders/editblock_fenced_prompts.py +143 -0
  20. aider/coders/editblock_func_coder.py +141 -0
  21. aider/coders/editblock_func_prompts.py +27 -0
  22. aider/coders/editblock_prompts.py +174 -0
  23. aider/coders/editor_diff_fenced_coder.py +9 -0
  24. aider/coders/editor_diff_fenced_prompts.py +11 -0
  25. aider/coders/editor_editblock_coder.py +8 -0
  26. aider/coders/editor_editblock_prompts.py +18 -0
  27. aider/coders/editor_whole_coder.py +8 -0
  28. aider/coders/editor_whole_prompts.py +10 -0
  29. aider/coders/help_coder.py +16 -0
  30. aider/coders/help_prompts.py +46 -0
  31. aider/coders/patch_coder.py +706 -0
  32. aider/coders/patch_prompts.py +161 -0
  33. aider/coders/search_replace.py +757 -0
  34. aider/coders/shell.py +37 -0
  35. aider/coders/single_wholefile_func_coder.py +102 -0
  36. aider/coders/single_wholefile_func_prompts.py +27 -0
  37. aider/coders/udiff_coder.py +429 -0
  38. aider/coders/udiff_prompts.py +115 -0
  39. aider/coders/udiff_simple.py +14 -0
  40. aider/coders/udiff_simple_prompts.py +25 -0
  41. aider/coders/wholefile_coder.py +144 -0
  42. aider/coders/wholefile_func_coder.py +134 -0
  43. aider/coders/wholefile_func_prompts.py +27 -0
  44. aider/coders/wholefile_prompts.py +67 -0
  45. aider/commands.py +1665 -0
  46. aider/copypaste.py +72 -0
  47. aider/deprecated.py +126 -0
  48. aider/diffs.py +128 -0
  49. aider/dump.py +29 -0
  50. aider/editor.py +147 -0
  51. aider/exceptions.py +107 -0
  52. aider/format_settings.py +26 -0
  53. aider/gui.py +545 -0
  54. aider/help.py +163 -0
  55. aider/help_pats.py +19 -0
  56. aider/history.py +143 -0
  57. aider/io.py +1175 -0
  58. aider/linter.py +304 -0
  59. aider/llm.py +47 -0
  60. aider/main.py +1267 -0
  61. aider/mdstream.py +243 -0
  62. aider/models.py +1286 -0
  63. aider/onboarding.py +428 -0
  64. aider/openrouter.py +128 -0
  65. aider/prompts.py +64 -0
  66. aider/queries/tree-sitter-language-pack/README.md +7 -0
  67. aider/queries/tree-sitter-language-pack/arduino-tags.scm +5 -0
  68. aider/queries/tree-sitter-language-pack/c-tags.scm +9 -0
  69. aider/queries/tree-sitter-language-pack/chatito-tags.scm +16 -0
  70. aider/queries/tree-sitter-language-pack/commonlisp-tags.scm +122 -0
  71. aider/queries/tree-sitter-language-pack/cpp-tags.scm +15 -0
  72. aider/queries/tree-sitter-language-pack/csharp-tags.scm +26 -0
  73. aider/queries/tree-sitter-language-pack/d-tags.scm +26 -0
  74. aider/queries/tree-sitter-language-pack/dart-tags.scm +92 -0
  75. aider/queries/tree-sitter-language-pack/elisp-tags.scm +5 -0
  76. aider/queries/tree-sitter-language-pack/elixir-tags.scm +54 -0
  77. aider/queries/tree-sitter-language-pack/elm-tags.scm +19 -0
  78. aider/queries/tree-sitter-language-pack/gleam-tags.scm +41 -0
  79. aider/queries/tree-sitter-language-pack/go-tags.scm +42 -0
  80. aider/queries/tree-sitter-language-pack/java-tags.scm +20 -0
  81. aider/queries/tree-sitter-language-pack/javascript-tags.scm +88 -0
  82. aider/queries/tree-sitter-language-pack/lua-tags.scm +34 -0
  83. aider/queries/tree-sitter-language-pack/ocaml-tags.scm +115 -0
  84. aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +98 -0
  85. aider/queries/tree-sitter-language-pack/pony-tags.scm +39 -0
  86. aider/queries/tree-sitter-language-pack/properties-tags.scm +5 -0
  87. aider/queries/tree-sitter-language-pack/python-tags.scm +14 -0
  88. aider/queries/tree-sitter-language-pack/r-tags.scm +21 -0
  89. aider/queries/tree-sitter-language-pack/racket-tags.scm +12 -0
  90. aider/queries/tree-sitter-language-pack/ruby-tags.scm +64 -0
  91. aider/queries/tree-sitter-language-pack/rust-tags.scm +60 -0
  92. aider/queries/tree-sitter-language-pack/solidity-tags.scm +43 -0
  93. aider/queries/tree-sitter-language-pack/swift-tags.scm +51 -0
  94. aider/queries/tree-sitter-language-pack/udev-tags.scm +20 -0
  95. aider/queries/tree-sitter-languages/README.md +23 -0
  96. aider/queries/tree-sitter-languages/c-tags.scm +9 -0
  97. aider/queries/tree-sitter-languages/c_sharp-tags.scm +46 -0
  98. aider/queries/tree-sitter-languages/cpp-tags.scm +15 -0
  99. aider/queries/tree-sitter-languages/dart-tags.scm +91 -0
  100. aider/queries/tree-sitter-languages/elisp-tags.scm +8 -0
  101. aider/queries/tree-sitter-languages/elixir-tags.scm +54 -0
  102. aider/queries/tree-sitter-languages/elm-tags.scm +19 -0
  103. aider/queries/tree-sitter-languages/go-tags.scm +30 -0
  104. aider/queries/tree-sitter-languages/hcl-tags.scm +77 -0
  105. aider/queries/tree-sitter-languages/java-tags.scm +20 -0
  106. aider/queries/tree-sitter-languages/javascript-tags.scm +88 -0
  107. aider/queries/tree-sitter-languages/kotlin-tags.scm +27 -0
  108. aider/queries/tree-sitter-languages/ocaml-tags.scm +115 -0
  109. aider/queries/tree-sitter-languages/ocaml_interface-tags.scm +98 -0
  110. aider/queries/tree-sitter-languages/php-tags.scm +26 -0
  111. aider/queries/tree-sitter-languages/python-tags.scm +12 -0
  112. aider/queries/tree-sitter-languages/ql-tags.scm +26 -0
  113. aider/queries/tree-sitter-languages/ruby-tags.scm +64 -0
  114. aider/queries/tree-sitter-languages/rust-tags.scm +60 -0
  115. aider/queries/tree-sitter-languages/scala-tags.scm +65 -0
  116. aider/queries/tree-sitter-languages/typescript-tags.scm +41 -0
  117. aider/reasoning_tags.py +82 -0
  118. aider/repo.py +623 -0
  119. aider/repomap.py +847 -0
  120. aider/report.py +200 -0
  121. aider/resources/__init__.py +3 -0
  122. aider/resources/model-metadata.json +468 -0
  123. aider/resources/model-settings.yml +1767 -0
  124. aider/run_cmd.py +132 -0
  125. aider/scrape.py +284 -0
  126. aider/sendchat.py +61 -0
  127. aider/special.py +203 -0
  128. aider/urls.py +17 -0
  129. aider/utils.py +338 -0
  130. aider/versioncheck.py +113 -0
  131. aider/voice.py +187 -0
  132. aider/waiting.py +221 -0
  133. aider/watch.py +318 -0
  134. aider/watch_prompts.py +12 -0
  135. aider/website/Gemfile +8 -0
  136. aider/website/_includes/blame.md +162 -0
  137. aider/website/_includes/get-started.md +22 -0
  138. aider/website/_includes/help-tip.md +5 -0
  139. aider/website/_includes/help.md +24 -0
  140. aider/website/_includes/install.md +5 -0
  141. aider/website/_includes/keys.md +4 -0
  142. aider/website/_includes/model-warnings.md +67 -0
  143. aider/website/_includes/multi-line.md +22 -0
  144. aider/website/_includes/python-m-aider.md +5 -0
  145. aider/website/_includes/recording.css +228 -0
  146. aider/website/_includes/recording.md +34 -0
  147. aider/website/_includes/replit-pipx.md +9 -0
  148. aider/website/_includes/works-best.md +1 -0
  149. aider/website/_sass/custom/custom.scss +103 -0
  150. aider/website/docs/config/adv-model-settings.md +1881 -0
  151. aider/website/docs/config/aider_conf.md +527 -0
  152. aider/website/docs/config/api-keys.md +90 -0
  153. aider/website/docs/config/dotenv.md +478 -0
  154. aider/website/docs/config/editor.md +127 -0
  155. aider/website/docs/config/model-aliases.md +103 -0
  156. aider/website/docs/config/options.md +843 -0
  157. aider/website/docs/config/reasoning.md +209 -0
  158. aider/website/docs/config.md +44 -0
  159. aider/website/docs/faq.md +378 -0
  160. aider/website/docs/git.md +76 -0
  161. aider/website/docs/index.md +47 -0
  162. aider/website/docs/install/codespaces.md +39 -0
  163. aider/website/docs/install/docker.md +57 -0
  164. aider/website/docs/install/optional.md +100 -0
  165. aider/website/docs/install/replit.md +8 -0
  166. aider/website/docs/install.md +115 -0
  167. aider/website/docs/languages.md +264 -0
  168. aider/website/docs/legal/contributor-agreement.md +111 -0
  169. aider/website/docs/legal/privacy.md +104 -0
  170. aider/website/docs/llms/anthropic.md +77 -0
  171. aider/website/docs/llms/azure.md +48 -0
  172. aider/website/docs/llms/bedrock.md +132 -0
  173. aider/website/docs/llms/cohere.md +34 -0
  174. aider/website/docs/llms/deepseek.md +32 -0
  175. aider/website/docs/llms/gemini.md +49 -0
  176. aider/website/docs/llms/github.md +105 -0
  177. aider/website/docs/llms/groq.md +36 -0
  178. aider/website/docs/llms/lm-studio.md +39 -0
  179. aider/website/docs/llms/ollama.md +75 -0
  180. aider/website/docs/llms/openai-compat.md +39 -0
  181. aider/website/docs/llms/openai.md +58 -0
  182. aider/website/docs/llms/openrouter.md +78 -0
  183. aider/website/docs/llms/other.md +103 -0
  184. aider/website/docs/llms/vertex.md +50 -0
  185. aider/website/docs/llms/warnings.md +10 -0
  186. aider/website/docs/llms/xai.md +53 -0
  187. aider/website/docs/llms.md +54 -0
  188. aider/website/docs/more/analytics.md +122 -0
  189. aider/website/docs/more/edit-formats.md +116 -0
  190. aider/website/docs/more/infinite-output.md +137 -0
  191. aider/website/docs/more-info.md +8 -0
  192. aider/website/docs/recordings/auto-accept-architect.md +31 -0
  193. aider/website/docs/recordings/dont-drop-original-read-files.md +35 -0
  194. aider/website/docs/recordings/index.md +21 -0
  195. aider/website/docs/recordings/model-accepts-settings.md +69 -0
  196. aider/website/docs/recordings/tree-sitter-language-pack.md +80 -0
  197. aider/website/docs/repomap.md +112 -0
  198. aider/website/docs/scripting.md +100 -0
  199. aider/website/docs/troubleshooting/aider-not-found.md +24 -0
  200. aider/website/docs/troubleshooting/edit-errors.md +76 -0
  201. aider/website/docs/troubleshooting/imports.md +62 -0
  202. aider/website/docs/troubleshooting/models-and-keys.md +54 -0
  203. aider/website/docs/troubleshooting/support.md +79 -0
  204. aider/website/docs/troubleshooting/token-limits.md +96 -0
  205. aider/website/docs/troubleshooting/warnings.md +12 -0
  206. aider/website/docs/troubleshooting.md +11 -0
  207. aider/website/docs/usage/browser.md +57 -0
  208. aider/website/docs/usage/caching.md +49 -0
  209. aider/website/docs/usage/commands.md +132 -0
  210. aider/website/docs/usage/conventions.md +119 -0
  211. aider/website/docs/usage/copypaste.md +121 -0
  212. aider/website/docs/usage/images-urls.md +48 -0
  213. aider/website/docs/usage/lint-test.md +118 -0
  214. aider/website/docs/usage/modes.md +211 -0
  215. aider/website/docs/usage/not-code.md +179 -0
  216. aider/website/docs/usage/notifications.md +87 -0
  217. aider/website/docs/usage/tips.md +79 -0
  218. aider/website/docs/usage/tutorials.md +30 -0
  219. aider/website/docs/usage/voice.md +121 -0
  220. aider/website/docs/usage/watch.md +294 -0
  221. aider/website/docs/usage.md +92 -0
  222. aider/website/share/index.md +101 -0
  223. chatmcp_cli-0.1.0.dist-info/METADATA +502 -0
  224. chatmcp_cli-0.1.0.dist-info/RECORD +228 -0
  225. chatmcp_cli-0.1.0.dist-info/WHEEL +5 -0
  226. chatmcp_cli-0.1.0.dist-info/entry_points.txt +3 -0
  227. chatmcp_cli-0.1.0.dist-info/licenses/LICENSE.txt +202 -0
  228. chatmcp_cli-0.1.0.dist-info/top_level.txt +1 -0
aider/linter.py ADDED
@@ -0,0 +1,304 @@
1
+ import os
2
+ import re
3
+ import subprocess
4
+ import sys
5
+ import traceback
6
+ import warnings
7
+ from dataclasses import dataclass
8
+ from pathlib import Path
9
+
10
+ import oslex
11
+ from grep_ast import TreeContext, filename_to_lang
12
+ from grep_ast.tsl import get_parser # noqa: E402
13
+
14
+ from aider.dump import dump # noqa: F401
15
+ from aider.run_cmd import run_cmd_subprocess # noqa: F401
16
+
17
+ # tree_sitter is throwing a FutureWarning
18
+ warnings.simplefilter("ignore", category=FutureWarning)
19
+
20
+
21
+ class Linter:
22
+ def __init__(self, encoding="utf-8", root=None):
23
+ self.encoding = encoding
24
+ self.root = root
25
+
26
+ self.languages = dict(
27
+ python=self.py_lint,
28
+ )
29
+ self.all_lint_cmd = None
30
+
31
+ def set_linter(self, lang, cmd):
32
+ if lang:
33
+ self.languages[lang] = cmd
34
+ return
35
+
36
+ self.all_lint_cmd = cmd
37
+
38
+ def get_rel_fname(self, fname):
39
+ if self.root:
40
+ try:
41
+ return os.path.relpath(fname, self.root)
42
+ except ValueError:
43
+ return fname
44
+ else:
45
+ return fname
46
+
47
+ def run_cmd(self, cmd, rel_fname, code):
48
+ cmd += " " + oslex.quote(rel_fname)
49
+
50
+ returncode = 0
51
+ stdout = ""
52
+ try:
53
+ returncode, stdout = run_cmd_subprocess(
54
+ cmd,
55
+ cwd=self.root,
56
+ encoding=self.encoding,
57
+ )
58
+ except OSError as err:
59
+ print(f"Unable to execute lint command: {err}")
60
+ return
61
+ errors = stdout
62
+ if returncode == 0:
63
+ return # zero exit status
64
+
65
+ res = f"## Running: {cmd}\n\n"
66
+ res += errors
67
+
68
+ return self.errors_to_lint_result(rel_fname, res)
69
+
70
+ def errors_to_lint_result(self, rel_fname, errors):
71
+ if not errors:
72
+ return
73
+
74
+ linenums = []
75
+ filenames_linenums = find_filenames_and_linenums(errors, [rel_fname])
76
+ if filenames_linenums:
77
+ filename, linenums = next(iter(filenames_linenums.items()))
78
+ linenums = [num - 1 for num in linenums]
79
+
80
+ return LintResult(text=errors, lines=linenums)
81
+
82
+ def lint(self, fname, cmd=None):
83
+ rel_fname = self.get_rel_fname(fname)
84
+ try:
85
+ code = Path(fname).read_text(encoding=self.encoding, errors="replace")
86
+ except OSError as err:
87
+ print(f"Unable to read {fname}: {err}")
88
+ return
89
+
90
+ if cmd:
91
+ cmd = cmd.strip()
92
+ if not cmd:
93
+ lang = filename_to_lang(fname)
94
+ if not lang:
95
+ return
96
+ if self.all_lint_cmd:
97
+ cmd = self.all_lint_cmd
98
+ else:
99
+ cmd = self.languages.get(lang)
100
+
101
+ if callable(cmd):
102
+ lintres = cmd(fname, rel_fname, code)
103
+ elif cmd:
104
+ lintres = self.run_cmd(cmd, rel_fname, code)
105
+ else:
106
+ lintres = basic_lint(rel_fname, code)
107
+
108
+ if not lintres:
109
+ return
110
+
111
+ res = "# Fix any errors below, if possible.\n\n"
112
+ res += lintres.text
113
+ res += "\n"
114
+ res += tree_context(rel_fname, code, lintres.lines)
115
+
116
+ return res
117
+
118
+ def py_lint(self, fname, rel_fname, code):
119
+ basic_res = basic_lint(rel_fname, code)
120
+ compile_res = lint_python_compile(fname, code)
121
+ flake_res = self.flake8_lint(rel_fname)
122
+
123
+ text = ""
124
+ lines = set()
125
+ for res in [basic_res, compile_res, flake_res]:
126
+ if not res:
127
+ continue
128
+ if text:
129
+ text += "\n"
130
+ text += res.text
131
+ lines.update(res.lines)
132
+
133
+ if text or lines:
134
+ return LintResult(text, lines)
135
+
136
+ def flake8_lint(self, rel_fname):
137
+ fatal = "E9,F821,F823,F831,F406,F407,F701,F702,F704,F706"
138
+ flake8_cmd = [
139
+ sys.executable,
140
+ "-m",
141
+ "flake8",
142
+ f"--select={fatal}",
143
+ "--show-source",
144
+ "--isolated",
145
+ rel_fname,
146
+ ]
147
+
148
+ text = f"## Running: {' '.join(flake8_cmd)}\n\n"
149
+
150
+ try:
151
+ result = subprocess.run(
152
+ flake8_cmd,
153
+ capture_output=True,
154
+ text=True,
155
+ check=False,
156
+ encoding=self.encoding,
157
+ errors="replace",
158
+ cwd=self.root,
159
+ )
160
+ errors = result.stdout + result.stderr
161
+ except Exception as e:
162
+ errors = f"Error running flake8: {str(e)}"
163
+
164
+ if not errors:
165
+ return
166
+
167
+ text += errors
168
+ return self.errors_to_lint_result(rel_fname, text)
169
+
170
+
171
+ @dataclass
172
+ class LintResult:
173
+ text: str
174
+ lines: list
175
+
176
+
177
+ def lint_python_compile(fname, code):
178
+ try:
179
+ compile(code, fname, "exec") # USE TRACEBACK BELOW HERE
180
+ return
181
+ except Exception as err:
182
+ end_lineno = getattr(err, "end_lineno", err.lineno)
183
+ line_numbers = list(range(err.lineno - 1, end_lineno))
184
+
185
+ tb_lines = traceback.format_exception(type(err), err, err.__traceback__)
186
+ last_file_i = 0
187
+
188
+ target = "# USE TRACEBACK"
189
+ target += " BELOW HERE"
190
+ for i in range(len(tb_lines)):
191
+ if target in tb_lines[i]:
192
+ last_file_i = i
193
+ break
194
+
195
+ tb_lines = tb_lines[:1] + tb_lines[last_file_i + 1 :]
196
+
197
+ res = "".join(tb_lines)
198
+ return LintResult(text=res, lines=line_numbers)
199
+
200
+
201
+ def basic_lint(fname, code):
202
+ """
203
+ Use tree-sitter to look for syntax errors, display them with tree context.
204
+ """
205
+
206
+ lang = filename_to_lang(fname)
207
+ if not lang:
208
+ return
209
+
210
+ # Tree-sitter linter is not capable of working with typescript #1132
211
+ if lang == "typescript":
212
+ return
213
+
214
+ try:
215
+ parser = get_parser(lang)
216
+ except Exception as err:
217
+ print(f"Unable to load parser: {err}")
218
+ return
219
+
220
+ tree = parser.parse(bytes(code, "utf-8"))
221
+
222
+ try:
223
+ errors = traverse_tree(tree.root_node)
224
+ except RecursionError:
225
+ print(f"Unable to lint {fname} due to RecursionError")
226
+ return
227
+
228
+ if not errors:
229
+ return
230
+
231
+ return LintResult(text="", lines=errors)
232
+
233
+
234
+ def tree_context(fname, code, line_nums):
235
+ context = TreeContext(
236
+ fname,
237
+ code,
238
+ color=False,
239
+ line_number=True,
240
+ child_context=False,
241
+ last_line=False,
242
+ margin=0,
243
+ mark_lois=True,
244
+ loi_pad=3,
245
+ # header_max=30,
246
+ show_top_of_file_parent_scope=False,
247
+ )
248
+ line_nums = set(line_nums)
249
+ context.add_lines_of_interest(line_nums)
250
+ context.add_context()
251
+ s = "s" if len(line_nums) > 1 else ""
252
+ output = f"## See relevant line{s} below marked with █.\n\n"
253
+ output += fname + ":\n"
254
+ output += context.format()
255
+
256
+ return output
257
+
258
+
259
+ # Traverse the tree to find errors
260
+ def traverse_tree(node):
261
+ errors = []
262
+ if node.type == "ERROR" or node.is_missing:
263
+ line_no = node.start_point[0]
264
+ errors.append(line_no)
265
+
266
+ for child in node.children:
267
+ errors += traverse_tree(child)
268
+
269
+ return errors
270
+
271
+
272
+ def find_filenames_and_linenums(text, fnames):
273
+ """
274
+ Search text for all occurrences of <filename>:\\d+ and make a list of them
275
+ where <filename> is one of the filenames in the list `fnames`.
276
+ """
277
+ pattern = re.compile(r"(\b(?:" + "|".join(re.escape(fname) for fname in fnames) + r"):\d+\b)")
278
+ matches = pattern.findall(text)
279
+ result = {}
280
+ for match in matches:
281
+ fname, linenum = match.rsplit(":", 1)
282
+ if fname not in result:
283
+ result[fname] = set()
284
+ result[fname].add(int(linenum))
285
+ return result
286
+
287
+
288
+ def main():
289
+ """
290
+ Main function to parse files provided as command line arguments.
291
+ """
292
+ if len(sys.argv) < 2:
293
+ print("Usage: python linter.py <file1> <file2> ...")
294
+ sys.exit(1)
295
+
296
+ linter = Linter(root=os.getcwd())
297
+ for file_path in sys.argv[1:]:
298
+ errors = linter.lint(file_path)
299
+ if errors:
300
+ print(errors)
301
+
302
+
303
+ if __name__ == "__main__":
304
+ main()
aider/llm.py ADDED
@@ -0,0 +1,47 @@
1
+ import importlib
2
+ import os
3
+ import warnings
4
+
5
+ from aider.dump import dump # noqa: F401
6
+
7
+ warnings.filterwarnings("ignore", category=UserWarning, module="pydantic")
8
+
9
+ AIDER_SITE_URL = "https://aider.chat"
10
+ AIDER_APP_NAME = "Aider"
11
+
12
+ os.environ["OR_SITE_URL"] = AIDER_SITE_URL
13
+ os.environ["OR_APP_NAME"] = AIDER_APP_NAME
14
+ os.environ["LITELLM_MODE"] = "PRODUCTION"
15
+
16
+ # `import litellm` takes 1.5 seconds, defer it!
17
+
18
+ VERBOSE = False
19
+
20
+
21
+ class LazyLiteLLM:
22
+ _lazy_module = None
23
+
24
+ def __getattr__(self, name):
25
+ if name == "_lazy_module":
26
+ return super()
27
+ self._load_litellm()
28
+ return getattr(self._lazy_module, name)
29
+
30
+ def _load_litellm(self):
31
+ if self._lazy_module is not None:
32
+ return
33
+
34
+ if VERBOSE:
35
+ print("Loading litellm...")
36
+
37
+ self._lazy_module = importlib.import_module("litellm")
38
+
39
+ self._lazy_module.suppress_debug_info = True
40
+ self._lazy_module.set_verbose = False
41
+ self._lazy_module.drop_params = True
42
+ self._lazy_module._logging._disable_debugging()
43
+
44
+
45
+ litellm = LazyLiteLLM()
46
+
47
+ __all__ = [litellm]