dwani 0.1.6__py3-none-any.whl → 0.1.8__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.
dwani/asr.py CHANGED
@@ -1,10 +1,46 @@
1
1
  from .exceptions import DhwaniAPIError
2
2
  import requests
3
+
4
+ # Allowed languages (case-sensitive for display, but we'll handle case-insensitively)
5
+ ALLOWED_LANGUAGES = [
6
+ "Assamese",
7
+ "Bengali",
8
+ "Gujarati",
9
+ "Hindi",
10
+ "Kannada",
11
+ "Malayalam",
12
+ "Marathi",
13
+ "Odia",
14
+ "Punjabi",
15
+ "Tamil",
16
+ "Telugu",
17
+ "English",
18
+ "German"
19
+ ]
20
+
21
+ def validate_language(language):
22
+ """Validate that the provided language is in the allowed list (case-insensitive)."""
23
+ # Create a case-insensitive mapping of allowed languages
24
+ language_map = {lang.lower(): lang for lang in ALLOWED_LANGUAGES}
25
+ # Check if the lowercase version of the input language is in the map
26
+ if language.lower() not in language_map:
27
+ raise ValueError(
28
+ f"Unsupported language: {language}. Supported languages: {ALLOWED_LANGUAGES}"
29
+ )
30
+ # Return the original case from ALLOWED_LANGUAGES for consistency
31
+ return language_map[language.lower()]
32
+
3
33
  def asr_transcribe(client, file_path, language):
34
+ # Validate the language input (case-insensitive)
35
+ validated_language = validate_language(language)
36
+
37
+ # Convert language to lowercase for the API request
38
+ api_language = validated_language.lower()
39
+
4
40
  with open(file_path, "rb") as f:
5
41
  files = {"file": f}
6
42
  resp = requests.post(
7
- f"{client.api_base}/v1/transcribe/?language={language}",
43
+ f"{client.api_base}/v1/transcribe/?language={api_language}",
8
44
  headers=client._headers(),
9
45
  files=files
10
46
  )
@@ -16,5 +52,4 @@ class ASR:
16
52
  @staticmethod
17
53
  def transcribe(*args, **kwargs):
18
54
  from . import _get_client
19
- return _get_client().transcribe(*args, **kwargs)
20
-
55
+ return _get_client().transcribe(*args, **kwargs)
dwani/chat.py CHANGED
@@ -1,12 +1,51 @@
1
1
  from .exceptions import DhwaniAPIError
2
2
  import requests
3
3
 
4
+ # Language options mapping
5
+ language_options = [
6
+ ("English", "eng_Latn"),
7
+ ("Kannada", "kan_Knda"),
8
+ ("Hindi", "hin_Deva"),
9
+ ("Assamese", "asm_Beng"),
10
+ ("Bengali","ben_Beng"),
11
+ ("Gujarati","guj_Gujr"),
12
+ ("Malayalam","mal_Mlym"),
13
+ ("Marathi","mar_Deva"),
14
+ ("Odia","ory_Orya"),
15
+ ("Punjabi","pan_Guru"),
16
+ ("Tamil","tam_Taml"),
17
+ ("Telugu","tel_Telu"),
18
+ ("German","deu_Latn"),
19
+ ]
20
+
21
+ # Create a dictionary for language name to code mapping
22
+ lang_name_to_code = {name.lower(): code for name, code in language_options}
23
+ lang_code_to_code = {code: code for _, code in language_options}
24
+
25
+ def normalize_language(lang):
26
+ """Convert language input (name or code) to language code."""
27
+ lang = lang.strip()
28
+ # Check if input is a language name (case-insensitive)
29
+ lang_lower = lang.lower()
30
+ if lang_lower in lang_name_to_code:
31
+ return lang_name_to_code[lang_lower]
32
+ # Check if input is a language code
33
+ if lang in lang_code_to_code:
34
+ return lang_code_to_code[lang]
35
+ # Raise error if language is not supported
36
+ supported_langs = list(lang_name_to_code.keys()) + list(lang_code_to_code.keys())
37
+ raise ValueError(f"Unsupported language: {lang}. Supported languages: {supported_langs}")
38
+
4
39
  def chat_create(client, prompt, src_lang, tgt_lang, **kwargs):
40
+ # Normalize source and target languages
41
+ src_lang_code = normalize_language(src_lang)
42
+ tgt_lang_code = normalize_language(tgt_lang)
43
+
5
44
  url = f"{client.api_base}/v1/indic_chat"
6
45
  payload = {
7
46
  "prompt": prompt,
8
- "src_lang": src_lang,
9
- "tgt_lang": tgt_lang
47
+ "src_lang": src_lang_code,
48
+ "tgt_lang": tgt_lang_code
10
49
  }
11
50
  payload.update(kwargs)
12
51
  resp = requests.post(
@@ -22,4 +61,4 @@ class Chat:
22
61
  @staticmethod
23
62
  def create(prompt, src_lang, tgt_lang, **kwargs):
24
63
  from . import _get_client
25
- return _get_client().chat(prompt, src_lang, tgt_lang, **kwargs)
64
+ return _get_client().chat(prompt, src_lang, tgt_lang, **kwargs)
dwani/docs.py CHANGED
@@ -1,13 +1,50 @@
1
1
  import requests
2
2
  from .exceptions import DhwaniAPIError
3
3
 
4
+ # Language options mapping
5
+ language_options = [
6
+ ("English", "eng_Latn"),
7
+ ("Kannada", "kan_Knda"),
8
+ ("Hindi", "hin_Deva"),
9
+ ("Assamese", "asm_Beng"),
10
+ ("Bengali", "ben_Beng"),
11
+ ("Gujarati", "guj_Gujr"),
12
+ ("Malayalam", "mal_Mlym"),
13
+ ("Marathi", "mar_Deva"),
14
+ ("Odia", "ory_Orya"),
15
+ ("Punjabi", "pan_Guru"),
16
+ ("Tamil", "tam_Taml"),
17
+ ("Telugu", "tel_Telu"),
18
+ ("German", "deu_Latn")
19
+ ]
20
+
21
+ # Create dictionaries for language name to code and code to code mapping
22
+ lang_name_to_code = {name.lower(): code for name, code in language_options}
23
+ lang_code_to_code = {code: code for _, code in language_options}
24
+
25
+ def normalize_language(lang):
26
+ """Convert language input (name or code) to language code."""
27
+ lang = lang.strip()
28
+ # Check if input is a language name (case-insensitive)
29
+ lang_lower = lang.lower()
30
+ if lang_lower in lang_name_to_code:
31
+ return lang_name_to_code[lang_lower]
32
+ # Check if input is a language code
33
+ if lang in lang_code_to_code:
34
+ return lang_code_to_code[lang]
35
+ # Raise error if language is not supported
36
+ supported_langs = list(lang_name_to_code.keys()) + list(lang_code_to_code.keys())
37
+ raise ValueError(f"Unsupported language: {lang}. Supported languages: {supported_langs}")
38
+
4
39
  def document_ocr(client, file_path, language=None):
5
40
  """OCR a document (image/PDF) and return extracted text."""
41
+ data = {}
42
+ if language:
43
+ # Normalize the language input
44
+ data["language"] = normalize_language(language)
45
+
6
46
  with open(file_path, "rb") as f:
7
47
  files = {"file": f}
8
- data = {}
9
- if language:
10
- data["language"] = language
11
48
  resp = requests.post(
12
49
  f"{client.api_base}/v1/document/ocr",
13
50
  headers=client._headers(),
@@ -20,14 +57,18 @@ def document_ocr(client, file_path, language=None):
20
57
 
21
58
  def document_summarize(client, file_path, page_number=1, src_lang="eng_Latn", tgt_lang="kan_Knda"):
22
59
  """Summarize a PDF document with language and page number options."""
60
+ # Normalize source and target languages
61
+ src_lang_code = normalize_language(src_lang)
62
+ tgt_lang_code = normalize_language(tgt_lang)
63
+
23
64
  url = f"{client.api_base}/v1/indic-summarize-pdf"
24
65
  headers = client._headers()
25
66
  with open(file_path, "rb") as f:
26
67
  files = {"file": (file_path, f, "application/pdf")}
27
68
  data = {
28
69
  "page_number": str(page_number),
29
- "src_lang": src_lang,
30
- "tgt_lang": tgt_lang
70
+ "src_lang": src_lang_code,
71
+ "tgt_lang": tgt_lang_code
31
72
  }
32
73
  resp = requests.post(
33
74
  url,
@@ -39,18 +80,20 @@ def document_summarize(client, file_path, page_number=1, src_lang="eng_Latn", tg
39
80
  raise DhwaniAPIError(resp)
40
81
  return resp.json()
41
82
 
42
-
43
83
  def extract(client, file_path, page_number, src_lang, tgt_lang):
44
84
  """
45
85
  Extract and translate text from a document (image/PDF) using query parameters.
46
86
  """
87
+ # Normalize source and target languages
88
+ src_lang_code = normalize_language(src_lang)
89
+ tgt_lang_code = normalize_language(tgt_lang)
90
+
47
91
  # Build the URL with query parameters
48
92
  url = (
49
93
  f"{client.api_base}/v1/indic-extract-text/"
50
- f"?page_number={page_number}&src_lang={src_lang}&tgt_lang={tgt_lang}"
94
+ f"?page_number={page_number}&src_lang={src_lang_code}&tgt_lang={tgt_lang_code}"
51
95
  )
52
96
  headers = client._headers()
53
- # 'requests' handles multipart/form-data automatically
54
97
  with open(file_path, "rb") as f:
55
98
  files = {"file": (file_path, f, "application/pdf")}
56
99
  resp = requests.post(
@@ -71,6 +114,10 @@ def doc_query(
71
114
  tgt_lang="kan_Knda"
72
115
  ):
73
116
  """Query a document with a custom prompt and language options."""
117
+ # Normalize source and target languages
118
+ src_lang_code = normalize_language(src_lang)
119
+ tgt_lang_code = normalize_language(tgt_lang)
120
+
74
121
  url = f"{client.api_base}/v1/indic-custom-prompt-pdf"
75
122
  headers = client._headers()
76
123
  with open(file_path, "rb") as f:
@@ -78,8 +125,8 @@ def doc_query(
78
125
  data = {
79
126
  "page_number": str(page_number),
80
127
  "prompt": prompt,
81
- "source_language": src_lang,
82
- "target_language": tgt_lang
128
+ "source_language": src_lang_code,
129
+ "target_language": tgt_lang_code
83
130
  }
84
131
  resp = requests.post(
85
132
  url,
@@ -91,7 +138,6 @@ def doc_query(
91
138
  raise DhwaniAPIError(resp)
92
139
  return resp.json()
93
140
 
94
-
95
141
  def doc_query_kannada(
96
142
  client,
97
143
  file_path,
@@ -101,18 +147,20 @@ def doc_query_kannada(
101
147
  language=None
102
148
  ):
103
149
  """Summarize a document (image/PDF/text) with custom prompt and language."""
150
+ # Normalize source language and optional language parameter
151
+ src_lang_code = normalize_language(src_lang)
152
+ data = {
153
+ "page_number": str(page_number),
154
+ "prompt": prompt,
155
+ "src_lang": src_lang_code,
156
+ }
157
+ if language:
158
+ data["language"] = normalize_language(language)
159
+
104
160
  url = f"{client.api_base}/v1/indic-custom-prompt-kannada-pdf"
105
161
  headers = client._headers()
106
- # 'requests' will handle multipart/form-data automatically
107
162
  with open(file_path, "rb") as f:
108
163
  files = {"file": (file_path, f, "application/pdf")}
109
- data = {
110
- "page_number": str(page_number),
111
- "prompt": prompt,
112
- "src_lang": src_lang,
113
- }
114
- if language:
115
- data["language"] = language
116
164
  resp = requests.post(
117
165
  url,
118
166
  headers=headers,
@@ -123,8 +171,6 @@ def doc_query_kannada(
123
171
  raise DhwaniAPIError(resp)
124
172
  return resp.json()
125
173
 
126
-
127
-
128
174
  class Documents:
129
175
  @staticmethod
130
176
  def ocr(file_path, language=None):
@@ -135,14 +181,17 @@ class Documents:
135
181
  def summarize(*args, **kwargs):
136
182
  from . import _get_client
137
183
  return _get_client().document_summarize(*args, **kwargs)
184
+
138
185
  @staticmethod
139
186
  def run_extract(*args, **kwargs):
140
187
  from . import _get_client
141
188
  return _get_client().extract(*args, **kwargs)
189
+
142
190
  @staticmethod
143
191
  def run_doc_query(*args, **kwargs):
144
192
  from . import _get_client
145
193
  return _get_client().doc_query(*args, **kwargs)
194
+
146
195
  @staticmethod
147
196
  def run_doc_query_kannada(*args, **kwargs):
148
197
  from . import _get_client
dwani/translate.py CHANGED
@@ -1,12 +1,51 @@
1
1
  from .exceptions import DhwaniAPIError
2
2
  import requests
3
3
 
4
+ # Language options mapping
5
+ language_options = [
6
+ ("English", "eng_Latn"),
7
+ ("Kannada", "kan_Knda"),
8
+ ("Hindi", "hin_Deva"),
9
+ ("Assamese", "asm_Beng"),
10
+ ("Bengali", "ben_Beng"),
11
+ ("Gujarati", "guj_Gujr"),
12
+ ("Malayalam", "mal_Mlym"),
13
+ ("Marathi", "mar_Deva"),
14
+ ("Odia", "ory_Orya"),
15
+ ("Punjabi", "pan_Guru"),
16
+ ("Tamil", "tam_Taml"),
17
+ ("Telugu", "tel_Telu"),
18
+ ("German", "deu_Latn")
19
+ ]
20
+
21
+ # Create dictionaries for language name to code and code to code mapping
22
+ lang_name_to_code = {name.lower(): code for name, code in language_options}
23
+ lang_code_to_code = {code: code for _, code in language_options}
24
+
25
+ def normalize_language(lang):
26
+ """Convert language input (name or code) to language code."""
27
+ lang = lang.strip()
28
+ # Check if input is a language name (case-insensitive)
29
+ lang_lower = lang.lower()
30
+ if lang_lower in lang_name_to_code:
31
+ return lang_name_to_code[lang_lower]
32
+ # Check if input is a language code
33
+ if lang in lang_code_to_code:
34
+ return lang_code_to_code[lang]
35
+ # Raise error if language is not supported
36
+ supported_langs = list(lang_name_to_code.keys()) + list(lang_code_to_code.keys())
37
+ raise ValueError(f"Unsupported language: {lang}. Supported languages: {supported_langs}")
38
+
4
39
  def run_translate(client, sentences, src_lang, tgt_lang, **kwargs):
40
+ # Normalize source and target languages
41
+ src_lang_code = normalize_language(src_lang)
42
+ tgt_lang_code = normalize_language(tgt_lang)
43
+
5
44
  url = f"{client.api_base}/v1/translate"
6
45
  payload = {
7
46
  "sentences": sentences,
8
- "src_lang": src_lang,
9
- "tgt_lang": tgt_lang
47
+ "src_lang": src_lang_code,
48
+ "tgt_lang": tgt_lang_code
10
49
  }
11
50
  payload.update(kwargs)
12
51
  resp = requests.post(
@@ -22,5 +61,4 @@ class Translate:
22
61
  @staticmethod
23
62
  def run_translate(sentences, src_lang, tgt_lang, **kwargs):
24
63
  from . import _get_client
25
- return _get_client().translate(sentences, src_lang, tgt_lang, **kwargs)
26
-
64
+ return _get_client().translate(sentences, src_lang, tgt_lang, **kwargs)
dwani/vision.py CHANGED
@@ -1,15 +1,54 @@
1
1
  from .exceptions import DhwaniAPIError
2
2
  import requests
3
+
4
+ # Language options mapping
5
+ language_options = [
6
+ ("English", "eng_Latn"),
7
+ ("Kannada", "kan_Knda"),
8
+ ("Hindi", "hin_Deva"),
9
+ ("Assamese", "asm_Beng"),
10
+ ("Bengali", "ben_Beng"),
11
+ ("Gujarati", "guj_Gujr"),
12
+ ("Malayalam", "mal_Mlym"),
13
+ ("Marathi", "mar_Deva"),
14
+ ("Odia", "ory_Orya"),
15
+ ("Punjabi", "pan_Guru"),
16
+ ("Tamil", "tam_Taml"),
17
+ ("Telugu", "tel_Telu"),
18
+ ("German","deu_Latn")
19
+ ]
20
+
21
+ # Create dictionaries for language name to code and code to code mapping
22
+ lang_name_to_code = {name.lower(): code for name, code in language_options}
23
+ lang_code_to_code = {code: code for _, code in language_options}
24
+
25
+ def normalize_language(lang):
26
+ """Convert language input (name or code) to language code."""
27
+ lang = lang.strip()
28
+ # Check if input is a language name (case-insensitive)
29
+ lang_lower = lang.lower()
30
+ if lang_lower in lang_name_to_code:
31
+ return lang_name_to_code[lang_lower]
32
+ # Check if input is a language code
33
+ if lang in lang_code_to_code:
34
+ return lang_code_to_code[lang]
35
+ # Raise error if language is not supported
36
+ supported_langs = list(lang_name_to_code.keys()) + list(lang_code_to_code.keys())
37
+ raise ValueError(f"Unsupported language: {lang}. Supported languages: {supported_langs}")
38
+
3
39
  def vision_caption(client, file_path, query="describe the image", src_lang="eng_Latn", tgt_lang="kan_Knda"):
40
+ # Normalize source and target languages
41
+ src_lang_code = normalize_language(src_lang)
42
+ tgt_lang_code = normalize_language(tgt_lang)
43
+
4
44
  # Build the endpoint using the client's api_base
5
45
  url = (
6
46
  f"{client.api_base}/v1/indic_visual_query"
7
- f"?src_lang={src_lang}&tgt_lang={tgt_lang}"
47
+ f"?src_lang={src_lang_code}&tgt_lang={tgt_lang_code}"
8
48
  )
9
49
  headers = {
10
50
  **client._headers(),
11
51
  "accept": "application/json"
12
- # Note: 'Content-Type' will be set automatically by requests when using 'files'
13
52
  }
14
53
  with open(file_path, "rb") as f:
15
54
  files = {"file": (file_path, f, "image/png")}
@@ -28,4 +67,4 @@ class Vision:
28
67
  @staticmethod
29
68
  def caption(*args, **kwargs):
30
69
  from . import _get_client
31
- return _get_client().caption(*args, **kwargs)
70
+ return _get_client().caption(*args, **kwargs)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dwani
3
- Version: 0.1.6
3
+ Version: 0.1.8
4
4
  Summary: Multimodal API for Indian languages (Chat, Vision, TTS, ASR, Translate, Docs)
5
5
  Author-email: sachin <python@dwani.ai>
6
6
  License: MIT License
@@ -42,6 +42,9 @@ Dynamic: license-file
42
42
  pip install dwani
43
43
  ```
44
44
 
45
+ ### Languages supported
46
+ - Assamese, Bengali, Gujarati, Hindi, Kannada, Malayalam, Marathi, Odia, Punjabi, Tamil, Telugu
47
+
45
48
  ### Setup the credentials
46
49
  ```python
47
50
  import dwani
@@ -56,7 +59,7 @@ dwani.api_base = os.getenv("DWANI_API_BASE_URL")
56
59
 
57
60
  #### Text Query
58
61
  ```python
59
- resp = dwani.Chat.create(prompt="Hello!", src_lang="eng_Latn", tgt_lang="kan_Knda")
62
+ resp = dwani.Chat.create(prompt="Hello!", src_lang="english", tgt_lang="kannada")
60
63
  print(resp)
61
64
  ```
62
65
  ```json
@@ -69,8 +72,8 @@ print(resp)
69
72
  result = dwani.Vision.caption(
70
73
  file_path="image.png",
71
74
  query="Describe this logo",
72
- src_lang="eng_Latn",
73
- tgt_lang="kan_Knda"
75
+ src_lang="english",
76
+ tgt_lang="kannada"
74
77
  )
75
78
  print(result)
76
79
  ```
@@ -89,7 +92,7 @@ print(result)
89
92
 
90
93
  ### Translate
91
94
  ```python
92
- resp = dwani.Translate.run_translate(sentences=["hi"], src_lang="eng_Latn", tgt_lang="kan_Knda")
95
+ resp = dwani.Translate.run_translate(sentences=["hi"], src_lang="english", tgt_lang="kannada")
93
96
  print(resp)
94
97
  ```
95
98
  ```json
@@ -105,7 +108,7 @@ with open("output.mp3", "wb") as f:
105
108
 
106
109
  #### Document - Extract Text
107
110
  ```python
108
- result = dwani.Documents.run_extract(file_path = "dwani-workshop.pdf", page_number=1, src_lang="eng_Latn",tgt_lang="kan_Knda" )
111
+ result = dwani.Documents.run_extract(file_path = "dwani-workshop.pdf", page_number=1, src_lang="english",tgt_lang="kannada" )
109
112
  print(result)
110
113
  ```
111
114
  ```json
@@ -0,0 +1,14 @@
1
+ dwani/__init__.py,sha256=ldO5OND7DvJlbxaQ0R57Cc73jJTnCSslDDt4I4r-Op8,1895
2
+ dwani/asr.py,sha256=4IN2RPBnFTCLb9WBrAEwIY2Ezm6BAmOv3Ej8EGrHUW4,1721
3
+ dwani/audio.py,sha256=Q9vw4uBxGy1vQzmiZjZGrY8hkAEQNkGhjz5OcnpFEQQ,888
4
+ dwani/chat.py,sha256=iBeiPf2XT_q4A0J4JmAu6e88hw0xhb774ls1KLBhTaY,2124
5
+ dwani/client.py,sha256=OrnwqxBQMfEZ1iQEleFigNujiZve3ox53yv5aSmB3iQ,2849
6
+ dwani/docs.py,sha256=9GgtQRjtilrhjt7F6FyqQZs3pDTZNI20KuP3Qae2Rh4,6351
7
+ dwani/exceptions.py,sha256=qEN5ukqlnN7v-kHNEnISWFMpPMt6uTft9mPsTXJ4LVA,227
8
+ dwani/translate.py,sha256=YpMX_3XtKkwAVSZ5wERuPBDk2-au58hmRVdynqU5kW8,2213
9
+ dwani/vision.py,sha256=ruoPAIxO24bq7aC3F3Kc8hOB159W5zsxNrYQGO8GUeo,2357
10
+ dwani-0.1.8.dist-info/licenses/LICENSE,sha256=IAD8tbwWZbPWHXgYjabHoMv0aaUzZUYzYiEbfhTCisY,1070
11
+ dwani-0.1.8.dist-info/METADATA,sha256=qg5AiiR1NKQ0HJVNSWkQyYjZI2dNodRraRrU6mL2Phs,4802
12
+ dwani-0.1.8.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
13
+ dwani-0.1.8.dist-info/top_level.txt,sha256=AM5EhkyuO_EXQFR9JIxEV6tAYMCCyc-a1dLifpCGBUk,6
14
+ dwani-0.1.8.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.4.0)
2
+ Generator: setuptools (80.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,14 +0,0 @@
1
- dwani/__init__.py,sha256=ldO5OND7DvJlbxaQ0R57Cc73jJTnCSslDDt4I4r-Op8,1895
2
- dwani/asr.py,sha256=Y5Mbv1KsvhfXNZacMZycUHPn79NRQC-XPH0j9SYPUSY,590
3
- dwani/audio.py,sha256=Q9vw4uBxGy1vQzmiZjZGrY8hkAEQNkGhjz5OcnpFEQQ,888
4
- dwani/chat.py,sha256=WFuEShNd4nd6KUbIZTkm3eyPGoP33GepOLJax86nNn8,720
5
- dwani/client.py,sha256=OrnwqxBQMfEZ1iQEleFigNujiZve3ox53yv5aSmB3iQ,2849
6
- dwani/docs.py,sha256=s7lgw9tfA0IlItAMlwnPuuxMEmS1ls9ygEIgjuUKlcg,4550
7
- dwani/exceptions.py,sha256=qEN5ukqlnN7v-kHNEnISWFMpPMt6uTft9mPsTXJ4LVA,227
8
- dwani/translate.py,sha256=SH8daC0MLudM3GX3ezoWufNmh1u1Ym4LELiUlWHeyeM,791
9
- dwani/vision.py,sha256=JtMSS0hI-8gxtLugVP10__enZsPPy8jheMyWXvrGrdw,1015
10
- dwani-0.1.6.dist-info/licenses/LICENSE,sha256=IAD8tbwWZbPWHXgYjabHoMv0aaUzZUYzYiEbfhTCisY,1070
11
- dwani-0.1.6.dist-info/METADATA,sha256=A3XIToek1Gj1y4rX8Ipd7-6fEa2kShIjUVl6ZD38j4o,4685
12
- dwani-0.1.6.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
13
- dwani-0.1.6.dist-info/top_level.txt,sha256=AM5EhkyuO_EXQFR9JIxEV6tAYMCCyc-a1dLifpCGBUk,6
14
- dwani-0.1.6.dist-info/RECORD,,