chatterer 0.1.23__py3-none-any.whl → 0.1.25__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 (47) hide show
  1. chatterer/__init__.py +97 -93
  2. chatterer/common_types/__init__.py +21 -21
  3. chatterer/common_types/io.py +19 -19
  4. chatterer/examples/__main__.py +75 -0
  5. chatterer/examples/{anything_to_markdown.py → any2md.py} +85 -85
  6. chatterer/examples/{pdf_to_markdown.py → pdf2md.py} +338 -338
  7. chatterer/examples/{pdf_to_text.py → pdf2txt.py} +54 -54
  8. chatterer/examples/{make_ppt.py → ppt.py} +486 -488
  9. chatterer/examples/pw.py +143 -0
  10. chatterer/examples/{get_code_snippets.py → snippet.py} +56 -55
  11. chatterer/examples/transcribe.py +192 -0
  12. chatterer/examples/{upstage_parser.py → upstage.py} +89 -89
  13. chatterer/examples/{webpage_to_markdown.py → web2md.py} +80 -70
  14. chatterer/interactive.py +354 -354
  15. chatterer/language_model.py +536 -536
  16. chatterer/messages.py +21 -21
  17. chatterer/strategies/__init__.py +13 -13
  18. chatterer/strategies/atom_of_thoughts.py +975 -975
  19. chatterer/strategies/base.py +14 -14
  20. chatterer/tools/__init__.py +46 -46
  21. chatterer/tools/caption_markdown_images.py +384 -384
  22. chatterer/tools/citation_chunking/__init__.py +3 -3
  23. chatterer/tools/citation_chunking/chunks.py +53 -53
  24. chatterer/tools/citation_chunking/citation_chunker.py +118 -118
  25. chatterer/tools/citation_chunking/citations.py +285 -285
  26. chatterer/tools/citation_chunking/prompt.py +157 -157
  27. chatterer/tools/citation_chunking/reference.py +26 -26
  28. chatterer/tools/citation_chunking/utils.py +138 -138
  29. chatterer/tools/convert_pdf_to_markdown.py +645 -625
  30. chatterer/tools/convert_to_text.py +446 -446
  31. chatterer/tools/upstage_document_parser.py +705 -705
  32. chatterer/tools/webpage_to_markdown.py +739 -739
  33. chatterer/tools/youtube.py +146 -146
  34. chatterer/utils/__init__.py +15 -15
  35. chatterer/utils/base64_image.py +293 -285
  36. chatterer/utils/bytesio.py +59 -59
  37. chatterer/utils/code_agent.py +237 -237
  38. chatterer/utils/imghdr.py +148 -148
  39. {chatterer-0.1.23.dist-info → chatterer-0.1.25.dist-info}/METADATA +390 -392
  40. chatterer-0.1.25.dist-info/RECORD +45 -0
  41. chatterer-0.1.25.dist-info/entry_points.txt +2 -0
  42. chatterer/examples/login_with_playwright.py +0 -156
  43. chatterer/examples/transcription_api.py +0 -112
  44. chatterer-0.1.23.dist-info/RECORD +0 -44
  45. chatterer-0.1.23.dist-info/entry_points.txt +0 -10
  46. {chatterer-0.1.23.dist-info → chatterer-0.1.25.dist-info}/WHEEL +0 -0
  47. {chatterer-0.1.23.dist-info → chatterer-0.1.25.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,45 @@
1
+ chatterer/__init__.py,sha256=hpbs8EXfz0OyOA1h9o2ZBR_556pyqcJfzJlQEf7Tl7E,2221
2
+ chatterer/interactive.py,sha256=bw4iZSPv57x0WPmasnObLM6f_tIgAJD-KbiXjN7NvYw,16702
3
+ chatterer/language_model.py,sha256=I7oAsD_qhQVxTdVWxEX9_Yt6py6sj8wddVueHED2E0U,20179
4
+ chatterer/messages.py,sha256=SIvG9hMHaPG4AFadeRbj5yPnMq2J06fHA4D8jrkz4kQ,458
5
+ chatterer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ chatterer/common_types/__init__.py,sha256=Ais0kqzQJj4sED24xdv5azIxHkkj0vXWb4LC41dFkBQ,355
7
+ chatterer/common_types/io.py,sha256=GBZVhcRRCNZTAC1OPKAwW4s3EiyYRmNZ0ZWD1DxgMzs,798
8
+ chatterer/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ chatterer/examples/__main__.py,sha256=N9QO9UvjDxiXLxhGRK6E5zw7Kl4CMVbfx58SQr_6eCc,1491
10
+ chatterer/examples/any2md.py,sha256=LSG1QqNoSFDM4G8SL8dcC7_oGMHcLkvV9mP2q6f6Lkk,2654
11
+ chatterer/examples/pdf2md.py,sha256=S9hX32KaohU7eEJiJuctkbKei1Xd9VmXHz00zWesQtk,13287
12
+ chatterer/examples/pdf2txt.py,sha256=lriV234AdNbCAaUFKgc8XW50yKva91ApfMRruuaWGHQ,1548
13
+ chatterer/examples/ppt.py,sha256=bFJPIsvJYAHxg85lxpOi9Q_MzcZU03cHm9Ip-AEviCU,22767
14
+ chatterer/examples/pw.py,sha256=a9yCPwVIXDctxSbBnW17Kp_QRgR3iXMJe2FoTwsPJ-w,5144
15
+ chatterer/examples/snippet.py,sha256=1RrqSr4ZZqTb_jZQjEed0G87oYGdsMSINu5qzrxH8Ps,1973
16
+ chatterer/examples/transcribe.py,sha256=cZoIn8PymlQJcoGKI3PYDlkrYC0juQ6HW5c1GlPk3KY,6650
17
+ chatterer/examples/upstage.py,sha256=UYehJC13askeJgZS1-aAJniv3KMGt8tQjFBkhfGSoBQ,3130
18
+ chatterer/examples/web2md.py,sha256=oOSyjdYn4nuv7uMBuNKmRl3PCA7J0rszR4bF9ZUjJRg,3127
19
+ chatterer/strategies/__init__.py,sha256=oroDpp5ppWralCER5wnf8fgX77dqLAPF0ogmRtRzQfU,208
20
+ chatterer/strategies/atom_of_thoughts.py,sha256=coXh8ODw7_ig6qcxhdJ5TAiyk70PJbrhElN0J5JD12w,40203
21
+ chatterer/strategies/base.py,sha256=rqOzTo6S2eQ3A_F9aBXCmVoLM1eT6F2VzZ2Dof330Tk,413
22
+ chatterer/tools/__init__.py,sha256=cOFo-Aj2xXK_7IvWYRdg6uNomaT9xuSa_mwk2Y0l_AM,1428
23
+ chatterer/tools/caption_markdown_images.py,sha256=PfvHvr7x0XRLKlujALvOfEB3pQmjzlYFbcJqw2NHgZs,15008
24
+ chatterer/tools/convert_pdf_to_markdown.py,sha256=hD4JloVdeQ4ZdAmSK1rQO2q-_rXhj3Zo7Hr3sKcGaoI,28264
25
+ chatterer/tools/convert_to_text.py,sha256=oeUwKs3on0S26hMD2h06uz4o6nRvMZfb1PMaSoQLglY,14999
26
+ chatterer/tools/upstage_document_parser.py,sha256=2gs_U4BxlNdRGxsieP5RUGVh5UEyzICpVLMcYP4ecwE,32437
27
+ chatterer/tools/webpage_to_markdown.py,sha256=E9ZTg7fC6Z0dzGuYEsokRyzb8WVhiWdGFlQdiNSrBQ0,31222
28
+ chatterer/tools/youtube.py,sha256=vrsf6pK6D6UBQQCiNUkE5Xe0VQ3SadoEnyAzGwhElX4,5935
29
+ chatterer/tools/citation_chunking/__init__.py,sha256=DyLMGG4dVgSnGIdaSHcBNDz09iXflcKuJCtg4W0JTVo,79
30
+ chatterer/tools/citation_chunking/chunks.py,sha256=_Sxzfbud8XTOHdHdQmKwm4-byES1cD1V6C28DgtS1BA,2120
31
+ chatterer/tools/citation_chunking/citation_chunker.py,sha256=Aye1BqUCa4u_CsTZoqCe72pJA8C_y2U5UR7cNoNpeo4,4776
32
+ chatterer/tools/citation_chunking/citations.py,sha256=BWhSwzZccvu0Db-OxEbsuEGEz-Dh_tXo8HRx1y2XUHg,12308
33
+ chatterer/tools/citation_chunking/prompt.py,sha256=so-8uFQ5b2Zq2V5Brfxd76bEnKYkHovYsohAnbxWEnY,7557
34
+ chatterer/tools/citation_chunking/reference.py,sha256=m47XYaB5uFff_x_k7US9hNr-SpZjKnl-GuzsGaQzcZo,893
35
+ chatterer/tools/citation_chunking/utils.py,sha256=Xytm9lMrS783Po1qWAdEJ8q7Q3l2UMzwHd9EkYTRiwk,6210
36
+ chatterer/utils/__init__.py,sha256=of2NeLOjsAI79TgA4bL7UggCnAc7xT9eu3eeUBt9K8k,326
37
+ chatterer/utils/base64_image.py,sha256=bS25MvOrD5i_ofamxyAy7L2dHjsqEgAhwwIRkT36Qq0,11088
38
+ chatterer/utils/bytesio.py,sha256=QabdJCZsabPaiYVfJcdXzdiHjuhqDlz1vJuLJ60P7TY,2559
39
+ chatterer/utils/code_agent.py,sha256=z3GYWZbiKByeMQKXKpUo5JVbkt2hkKwWULyzdkgak1c,10258
40
+ chatterer/utils/imghdr.py,sha256=aZ1_AsRzyTsbV7uoeAZMVaC-hj73kvnFHMdHtFKskdE,3694
41
+ chatterer-0.1.25.dist-info/METADATA,sha256=ADRPMFWQAwtfXt4tZEChB_yOXq1qJFPhUr2vdyqm3Lk,11273
42
+ chatterer-0.1.25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
43
+ chatterer-0.1.25.dist-info/entry_points.txt,sha256=IzGKhTnZ7G5V23SRmulmSsyt9HcaFH4lU4r3wR1zMsc,63
44
+ chatterer-0.1.25.dist-info/top_level.txt,sha256=7nSQKP0bHxPRc7HyzdbKsJdkvPgYD0214o6slRizv9s,10
45
+ chatterer-0.1.25.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ chatterer = chatterer.examples.__main__:main
@@ -1,156 +0,0 @@
1
- import json
2
- import logging
3
- import sys
4
- from pathlib import Path
5
-
6
- from spargear import BaseArguments, SubcommandSpec
7
-
8
- from chatterer import PlayWrightBot
9
-
10
- logger = logging.getLogger(__name__)
11
-
12
-
13
- # Define the default path location relative to this script file
14
- DEFAULT_JSON_PATH = Path(__file__).resolve().parent / "session_state.json"
15
-
16
-
17
- class ReadArgs(BaseArguments):
18
- """Arguments for the 'read' subcommand."""
19
-
20
- url: str
21
- """URL (potentially protected) to navigate to using the saved session."""
22
- jsonpath: Path = DEFAULT_JSON_PATH
23
- """Path to the session state JSON file to load."""
24
-
25
-
26
- class WriteArgs(BaseArguments):
27
- """Arguments for the 'write' subcommand."""
28
-
29
- url: str
30
- """URL to navigate to for manual login."""
31
- jsonpath: Path = DEFAULT_JSON_PATH
32
- """Path to save the session state JSON file."""
33
-
34
-
35
- class LoginWithPlaywrightArgs(BaseArguments):
36
- """
37
- A simple CLI tool for saving and using Playwright sessions via storage_state.
38
- Uses spargear for declarative argument parsing.
39
- """
40
-
41
- read: SubcommandSpec[ReadArgs] = SubcommandSpec(
42
- name="read",
43
- argument_class=ReadArgs,
44
- help="Use a saved session to view a protected page.",
45
- description="Loads session state from the specified JSON file and navigates to the URL.",
46
- )
47
- write: SubcommandSpec[WriteArgs] = SubcommandSpec(
48
- name="write",
49
- argument_class=WriteArgs,
50
- help="Save a new session by manually logging in.",
51
- description="Launches a browser to the specified URL. Log in manually, then press Enter to save session state.",
52
- )
53
-
54
- def run(self) -> None:
55
- """Parses arguments using spargear and executes the corresponding command."""
56
- try:
57
- if (read := self.read.argument_class).url:
58
- # Access attributes directly from the returned instance
59
- logger.info("Running READ command:")
60
- logger.info(f" URL: {read.url}")
61
- logger.info(f" JSON Path: {read.jsonpath}")
62
- read_session(url=read.url, jsonpath=read.jsonpath)
63
- elif (write := self.write.argument_class).url:
64
- # Access attributes directly from the returned instance
65
- logger.info("Running WRITE command:")
66
- logger.info(f" URL: {write.url}")
67
- logger.info(f" JSON Path: {write.jsonpath}")
68
- write_session(url=write.url, jsonpath=write.jsonpath)
69
- else:
70
- logger.error("No valid subcommand provided. Use 'read' or 'write'.")
71
- sys.exit(1)
72
-
73
- except SystemExit as e:
74
- # Handle cases like -h/--help or argparse errors that exit
75
- sys.exit(e.code)
76
- except Exception as e:
77
- logger.error(f"\nAn error occurred: {e}")
78
- # from traceback import print_exc # Uncomment for full traceback
79
- # print_exc() # Uncomment for full traceback
80
- sys.exit(1)
81
-
82
-
83
- def read_session(url: str, jsonpath: Path) -> None:
84
- """
85
- Loads the session state from the specified JSON file, then navigates
86
- to a protected_url that normally requires login. If the stored session
87
- is valid, it should open without re-entering credentials.
88
-
89
- Correction: Loads the JSON content into a dict first to satisfy type hints.
90
- """
91
- logger.info(f"Loading session from {jsonpath} and navigating to {url} ...")
92
-
93
- if not jsonpath.exists():
94
- logger.error(f"Session file not found at {jsonpath}")
95
- sys.exit(1)
96
-
97
- # Load the storage state from the JSON file into a dictionary
98
- logger.info(f"Reading storage state content from {jsonpath} ...")
99
- try:
100
- with open(jsonpath, "r", encoding="utf-8") as f:
101
- # This dictionary should match the 'StorageState' type expected by Playwright/chatterer
102
- storage_state_dict = json.load(f)
103
- except json.JSONDecodeError:
104
- logger.error(f"Failed to decode JSON from {jsonpath}")
105
- sys.exit(1)
106
- except Exception as e:
107
- logger.error(f"Error reading file {jsonpath}: {e}")
108
- sys.exit(1)
109
-
110
- logger.info("Launching browser with loaded session state...")
111
- with PlayWrightBot(
112
- playwright_launch_options={"headless": False},
113
- # Pass the loaded dictionary, which should match the expected 'StorageState' type
114
- playwright_persistency_options={"storage_state": storage_state_dict},
115
- ) as bot:
116
- bot.get_page(url)
117
-
118
- logger.info("Press Enter in the console when you're done checking the protected page.")
119
- input(" >> Press Enter to exit: ")
120
-
121
- logger.info("Done! Browser is now closed.")
122
-
123
-
124
- def write_session(url: str, jsonpath: Path) -> None:
125
- """
126
- Launches a non-headless browser and navigates to the login_url.
127
- The user can manually log in, then press Enter in the console
128
- to store the current session state into a JSON file.
129
- """
130
- logger.info(f"Launching browser and navigating to {url} ... Please log in manually.")
131
-
132
- # Ensure jsonpath directory exists
133
- jsonpath.parent.mkdir(parents=True, exist_ok=True)
134
-
135
- with PlayWrightBot(playwright_launch_options={"headless": False}) as bot:
136
- bot.get_page(url)
137
-
138
- logger.info("After completing the login in the browser, press Enter here to save the session.")
139
- input(" >> Press Enter when ready: ")
140
-
141
- # get_sync_browser() returns the BrowserContext internally
142
- context = bot.get_sync_browser()
143
-
144
- # Save the current session (cookies, localStorage) to a JSON file
145
- logger.info(f"Saving storage state to {jsonpath} ...")
146
- context.storage_state(path=jsonpath) # Pass Path object directly
147
-
148
- logger.info("Done! Browser is now closed.")
149
-
150
-
151
- def main() -> None:
152
- LoginWithPlaywrightArgs().run()
153
-
154
-
155
- if __name__ == "__main__":
156
- main()
@@ -1,112 +0,0 @@
1
- # pyright: reportUnknownVariableType=false, reportUnknownMemberType=false, reportArgumentType=false, reportMissingTypeStubs=false
2
-
3
- from io import BytesIO
4
- from pathlib import Path
5
- from typing import Optional, cast
6
-
7
- from openai import OpenAI
8
- from pydub import AudioSegment
9
- from spargear import BaseArguments
10
-
11
- # Maximum chunk length in seconds
12
- MAX_CHUNK_DURATION = 600
13
-
14
-
15
- class TranscriptionApiArguments(BaseArguments):
16
- input: Path
17
- """The audio file to transcribe."""
18
- output: Optional[Path] = None
19
- """Path to save the transcription output."""
20
- model: str = "gpt-4o-transcribe"
21
- """The model to use for transcription."""
22
- api_key: Optional[str] = None
23
- """The API key for authentication."""
24
- base_url: str = "https://api.openai.com/v1"
25
- """The base URL for the API."""
26
- prompt: str = "Transcribe whole text from audio."
27
- """The prompt to use for transcription."""
28
-
29
- def run(self) -> None:
30
- model = self.model
31
-
32
- client = OpenAI(api_key=self.api_key, base_url=self.base_url)
33
-
34
- audio = load_audio_segment(self.input)
35
-
36
- segments = split_audio(audio, MAX_CHUNK_DURATION)
37
- print(f"[i] Audio duration: {len(audio) / 1000:.1f}s; splitting into {len(segments)} segment(s)")
38
-
39
- transcripts: list[str] = []
40
- for idx, seg in enumerate(segments, start=1):
41
- print(f"[i] Transcribing segment {idx}/{len(segments)}...")
42
- transcripts.append(transcribe_segment(seg, client, model, self.prompt))
43
-
44
- full_transcript = "\n\n".join(transcripts)
45
- output_path: Path = self.output or self.input.with_suffix(".txt")
46
- output_path.write_text(full_transcript, encoding="utf-8")
47
- print(f"[✓] Transcription saved to: {output_path}")
48
-
49
-
50
- def load_audio_segment(file_path: Path) -> AudioSegment:
51
- """
52
- Load an audio file as an AudioSegment. Convert to mp3 format in-memory if needed.
53
- """
54
- ext = file_path.suffix.lower()[1:]
55
- audio = AudioSegment.from_file(file_path.as_posix(), format=ext if ext != "mp3" else None)
56
- if ext != "mp3":
57
- buffer = BytesIO()
58
- audio.export(buffer, format="mp3")
59
- buffer.seek(0)
60
- audio = AudioSegment.from_file(buffer, format="mp3")
61
- return audio
62
-
63
-
64
- def split_audio(audio: AudioSegment, max_duration_s: int) -> list[AudioSegment]:
65
- """
66
- Split the AudioSegment into chunks no longer than max_duration_s seconds.
67
- """
68
- chunk_length_ms = (max_duration_s - 1) * 1000
69
- duration_ms = len(audio)
70
- segments: list[AudioSegment] = []
71
- segment_idx: int = 0
72
- for start_ms in range(0, duration_ms, chunk_length_ms):
73
- end_ms = min(start_ms + chunk_length_ms, duration_ms)
74
- segment = cast(AudioSegment, audio[start_ms:end_ms])
75
- segments.append(segment)
76
- # with open(f"segment_{segment_idx}.mp3", "wb") as f:
77
- # segment.export(f, format="mp3")
78
- segment_idx += 1
79
- return segments
80
-
81
-
82
- def transcribe_segment(segment: AudioSegment, client: OpenAI, model: str, prompt: str) -> str:
83
- """
84
- Transcribe a single AudioSegment chunk and return its text.
85
- """
86
- buffer = BytesIO()
87
- segment.export(buffer, format="mp3")
88
- buffer.seek(0)
89
- mp3_bytes = buffer.read()
90
- response = client.audio.transcriptions.create(
91
- model=model,
92
- prompt=prompt,
93
- file=("audio.mp3", mp3_bytes),
94
- response_format="text",
95
- stream=True,
96
- )
97
- for res in response:
98
- if res.type == "transcript.text.delta":
99
- print(res.delta, end="", flush=True)
100
- if res.type == "transcript.text.done":
101
- print()
102
- return res.text
103
- else:
104
- raise RuntimeError("No transcription result found.")
105
-
106
-
107
- def main() -> None:
108
- TranscriptionApiArguments().run()
109
-
110
-
111
- if __name__ == "__main__":
112
- main()
@@ -1,44 +0,0 @@
1
- chatterer/__init__.py,sha256=1z3ocUMqgbqQ3eD4wq5Jq-JPt-VuWwdWT_U8r38Hodo,2267
2
- chatterer/interactive.py,sha256=B8KvlXAGpNEF-czJJpS_f9eJj1TenkE6896w9ixNjOk,17056
3
- chatterer/language_model.py,sha256=QkJLmmTYcWbqosm3D70zfhDSFETD7PIafRaY5upT7Gc,20715
4
- chatterer/messages.py,sha256=j_bjOVE2FbBaYYpykmJrQL-IH_BWyiZ1VAUCj_wSA2U,479
5
- chatterer/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- chatterer/common_types/__init__.py,sha256=jfS6m5UANSvGjzQ_nzYDpryn5uZqNb06-4xCsQ2C_lw,376
7
- chatterer/common_types/io.py,sha256=fetiyi1suZ3NF2mj5k5KDLJLGKS1n4J-5UmH7JN36g8,817
8
- chatterer/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- chatterer/examples/anything_to_markdown.py,sha256=4O9ze7AIHcwEzvVmm5JMMKo_rVSFwhPL8MVHtfMLJ5Y,2734
10
- chatterer/examples/get_code_snippets.py,sha256=pz05JjhKaWAknVKlk1ftEEzpSG4-sqD9oa_gyIQoCAs,1911
11
- chatterer/examples/login_with_playwright.py,sha256=EhvJLaH5TD7bmDi12uP8YLd0fRhdjR-oyIkBHLi1Jjs,5988
12
- chatterer/examples/make_ppt.py,sha256=vsT_iL_jS2ami5VYrReLMQcD576FfZUH7913F7_As0A,23278
13
- chatterer/examples/pdf_to_markdown.py,sha256=mur63PxI0uwl90Mh49VXPuO0YSwyEfs0-MwxJWKWXec,13577
14
- chatterer/examples/pdf_to_text.py,sha256=DznTyhu1REv8Wp4RimQWVgEU5j0_BmlwjfJYJvx3dbI,1590
15
- chatterer/examples/transcription_api.py,sha256=WUs12qHH4616eLMQDHOiyVGxaXstTpgeE47djYyli6c,3897
16
- chatterer/examples/upstage_parser.py,sha256=TrfeSIiF0xklhFCknop22TIOVibI4CJ_UKj5-lD8c8E,3487
17
- chatterer/examples/webpage_to_markdown.py,sha256=DnZfQ-trXBiOiszA2tMlgadgKH-ObTi6l4gGloT-cQw,2846
18
- chatterer/strategies/__init__.py,sha256=SdOggbmHpw4f7Njwy-T8q64e91OLOUp1k0a0ozZd4qI,221
19
- chatterer/strategies/atom_of_thoughts.py,sha256=pUhqt47YlzBIVNRh0UebeBwuJ0J94Ge6yZgXxrsiDPE,40884
20
- chatterer/strategies/base.py,sha256=b2gMPqodp97OP1dkHfj0UqixjdjVhmTw_V5qJ7i2S6g,427
21
- chatterer/tools/__init__.py,sha256=m3PRK9H5vOhk-2gG9W2eg8CYBlEn-K9-eaulOu91bgo,1474
22
- chatterer/tools/caption_markdown_images.py,sha256=r4QajHYuL4mdyYQXP1vQcNmqKN8lxBf5y0VKELXILOI,15392
23
- chatterer/tools/convert_pdf_to_markdown.py,sha256=_a-nVNs_9j4QsDPKI5p6AZeasgOW3x_2rb49-yfBSPs,28501
24
- chatterer/tools/convert_to_text.py,sha256=WHQ0Xj4Ri_jYbFjzTx3mjmvJ9U8bAv4wGaKEVC88Nlk,15457
25
- chatterer/tools/upstage_document_parser.py,sha256=CXslVYAHDK8EV8jtUAUWzf8rxU4qilSnW8_dhAxHOE8,33142
26
- chatterer/tools/webpage_to_markdown.py,sha256=ADH4sqM6iquJR7HU6umMQ5qO7EvcbNutuchXDpAcxAo,31961
27
- chatterer/tools/youtube.py,sha256=Hl2MMXJwwZ-i6_YAq0zh0rN4LHpYOb1Rt88P1gMjlLE,6081
28
- chatterer/tools/citation_chunking/__init__.py,sha256=gG7Fnkkp28UpcWMbfMY_4gqzZSZ8QzlhalHBoeoq7K0,82
29
- chatterer/tools/citation_chunking/chunks.py,sha256=50Dpa43RaYftlNox8tM1qI8htZ3_AJ9Uyyn02WsmxYk,2173
30
- chatterer/tools/citation_chunking/citation_chunker.py,sha256=yx5O9pUkowlNcFyyNf7f3sbq7-CV8AXOzFnviDldPR8,4894
31
- chatterer/tools/citation_chunking/citations.py,sha256=RWVJA38yvlER9PhLDPZnqaRsbQ334W4FDQXBqGpdi08,12593
32
- chatterer/tools/citation_chunking/prompt.py,sha256=S0Z6v8R23_Vknt3qYyjoDE1_gBsb0fCEx7LIw7BFXmA,7714
33
- chatterer/tools/citation_chunking/reference.py,sha256=uRKufkU41Zedz6MQUCy-aCk4Rwxg94m4b332zKDpXAs,919
34
- chatterer/tools/citation_chunking/utils.py,sha256=M4pH2-UIE1VLzQLXDqjEe4L3Xcy0e0KhAP3I2U2BNms,6348
35
- chatterer/utils/__init__.py,sha256=2v-lB2dqHgBlGcyaKKHc_hcyeH_AVoOddpr0STF7YAw,341
36
- chatterer/utils/base64_image.py,sha256=m_qAT3ERBiq8D-H4H9Z7rLfL31_BiPmV_m4uQ5XRLs0,11124
37
- chatterer/utils/bytesio.py,sha256=3MC2atOOFKo5YxuReo_y_t8Wem9p2Y1ahC5M2lGclwI,2618
38
- chatterer/utils/code_agent.py,sha256=7ka_WRI4TQmZ5H46mjY3hI6RO_pxw6pg3LAxjgW4AbM,10495
39
- chatterer/utils/imghdr.py,sha256=6JhJMXD4MZ0dQolT2VM87YrRYm3hPf3RTEWnP4lYRVc,3842
40
- chatterer-0.1.23.dist-info/METADATA,sha256=zCTgA4OAI2tSpNRiLwjCDPweTrW4oxzJnIXT7PA69Ck,11826
41
- chatterer-0.1.23.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
42
- chatterer-0.1.23.dist-info/entry_points.txt,sha256=KhxL2dctnZalnDSmPoB5dZBBa9hZpJETW3C5xkoRaW4,554
43
- chatterer-0.1.23.dist-info/top_level.txt,sha256=7nSQKP0bHxPRc7HyzdbKsJdkvPgYD0214o6slRizv9s,10
44
- chatterer-0.1.23.dist-info/RECORD,,
@@ -1,10 +0,0 @@
1
- [console_scripts]
2
- anything-to-markdown = chatterer.examples.anything_to_markdown:main
3
- get-code-snippets = chatterer.examples.get_code_snippets:main
4
- login-with-playwright = chatterer.examples.login_with_playwright:main
5
- make-ppt = chatterer.examples.make_ppt:main
6
- pdf-to-markdown = chatterer.examples.pdf_to_markdown:main
7
- pdf-to-text = chatterer.examples.pdf_to_text:main
8
- transcription-api = chatterer.examples.transcription_api:main
9
- upstage-parser = chatterer.examples.upstage_parser:main
10
- webpage-to-markdown = chatterer.examples.webpage_to_markdown:main