davidkhala.ai 0.0.4__py3-none-any.whl → 0.0.6__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.
@@ -38,7 +38,8 @@ class API(AbstractClient):
38
38
  "meta": {
39
39
  "usage": response['usage'],
40
40
  "created": datetime.datetime.fromtimestamp(response['created'])
41
- }
41
+ },
42
+ 'model': response['model'],
42
43
  }
43
44
 
44
45
  def list_models(self):
@@ -1,9 +1,12 @@
1
+ import time
2
+
1
3
  import requests
2
4
  from davidkhala.http_request import default_on_response
3
- from requests import HTTPError, Response
5
+ from requests import Response
4
6
 
5
7
  from davidkhala.ai.api import API
6
8
 
9
+
7
10
  class OpenRouter(API):
8
11
  @property
9
12
  def free_models(self) -> list[str]:
@@ -20,11 +23,11 @@ class OpenRouter(API):
20
23
  err = r.get('error')
21
24
  if err:
22
25
  derived_response = Response()
23
- derived_response.status_code = err.pop('code', None)
24
- derived_response._content = err.pop('message', None)
25
- http_err = HTTPError(response=derived_response)
26
- http_err.metadata = err.get("metadata")
27
- raise http_err
26
+ derived_response.status_code = err['code']
27
+ derived_response.reason = err['message']
28
+ derived_response.metadata = err.get("metadata")
29
+
30
+ derived_response.raise_for_status()
28
31
  return r
29
32
 
30
33
  def __init__(self, api_key: str, *models: str, **kwargs):
@@ -36,16 +39,23 @@ class OpenRouter(API):
36
39
  'url'] # Site URL for rankings on openrouter.ai.
37
40
  self._.options["headers"]["X-Title"] = kwargs['leaderboard'][
38
41
  'name'] # Site title for rankings on openrouter.ai.
39
- if not models:
40
- models = [self.free_models[0]]
41
42
  self.models = models
42
43
 
43
44
  self._.on_response = OpenRouter.on_response
44
45
 
45
46
  def chat(self, *user_prompt: str, **kwargs):
46
- if len(self.models) > 1:
47
+ if self.models:
47
48
  kwargs["models"] = self.models
48
49
  else:
49
- kwargs["model"] = self.models[0]
50
-
51
- return super().chat(*user_prompt, **kwargs)
50
+ kwargs["model"] = self.model
51
+
52
+ try:
53
+ r = super().chat(*user_prompt, **kwargs)
54
+ except requests.HTTPError as e:
55
+ if e.response.status_code == 429 and kwargs.get('retry'):
56
+ time.sleep(1)
57
+ return self.chat(*user_prompt, **kwargs)
58
+ else: raise
59
+ if self.models:
60
+ assert r['model'] in self.models
61
+ return r
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: davidkhala.ai
3
- Version: 0.0.4
3
+ Version: 0.0.6
4
4
  Summary: misc AI modules
5
5
  Requires-Python: >=3.13
6
6
  Provides-Extra: ali
@@ -5,8 +5,8 @@ davidkhala/ai/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
5
5
  davidkhala/ai/agent/langgraph.py,sha256=jrc_Yvgo7eJjd3y5UJn0t1FzpnObDGYscwgsuVl2O_I,1052
6
6
  davidkhala/ai/ali/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  davidkhala/ai/ali/dashscope.py,sha256=b49unSTVXhjHCA0F1Qt6_-Zs7zjSgEetIcVK5E2nDMQ,1968
8
- davidkhala/ai/api/__init__.py,sha256=bcrAFJKlhLHW5CB0aqjQ04FginKVwifxVQeHF0nRRCE,1274
9
- davidkhala/ai/api/openrouter.py,sha256=sQ5Yef9RccKB-qCCinK4uOooyasHmlJ6f2BtO_Ly0CQ,1870
8
+ davidkhala/ai/api/__init__.py,sha256=Ekz1jPAkDPzeNmhlp5HUSFjbeuniXLd_y5JlpGJUEcY,1316
9
+ davidkhala/ai/api/openrouter.py,sha256=qELzeKmWLviscmBYrB9kOnEQMYAQLaJDgoqC9TB319o,2072
10
10
  davidkhala/ai/api/siliconflow.py,sha256=B5Zccpq1peNY5mQJS7duBEonj-aeQVxvmU7F7AVIN_s,1356
11
11
  davidkhala/ai/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  davidkhala/ai/google/adk.py,sha256=QwxYoOzT2Hol03V4NM0PF_HAzUGb4fB18VUAYacYbAY,657
@@ -14,6 +14,6 @@ davidkhala/ai/google/gemini.py,sha256=Xf4HDOOcK4-jEBERzuLnQNFsU61P2fFx4K0z-ijvNH
14
14
  davidkhala/ai/openai/__init__.py,sha256=B0LG4h4cquK2sS4DqBywV-Kf6pwOVp8hU5H8hUp-pXA,1870
15
15
  davidkhala/ai/openai/azure.py,sha256=jAtZNW1d8ub3odhB_f1MXxM7MImg64MXDnqLm1-Idkk,828
16
16
  davidkhala/ai/openai/native.py,sha256=-XuHn0KSQnuFdJ4jTwZla1ts5iOW2L2Hosfo8o8iip8,257
17
- davidkhala_ai-0.0.4.dist-info/METADATA,sha256=dGW0vJNd8_iDS_dXSQtvmkzCX2VqhZLFUVDWPKRgdfU,698
18
- davidkhala_ai-0.0.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
19
- davidkhala_ai-0.0.4.dist-info/RECORD,,
17
+ davidkhala_ai-0.0.6.dist-info/METADATA,sha256=M7AICLOOZqW4pG2-cxqDmFcd-dVf-nQA9grqbGh0r1o,698
18
+ davidkhala_ai-0.0.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
19
+ davidkhala_ai-0.0.6.dist-info/RECORD,,