grasp_agents 0.3.5__py3-none-any.whl → 0.3.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.
grasp_agents/cloud_llm.py CHANGED
@@ -127,21 +127,32 @@ class CloudLLM(LLM[SettingsT_co, ConvertT_co], Generic[SettingsT_co, ConvertT_co
127
127
  )
128
128
 
129
129
  self._model_name = model_name
130
+ model_name_parts = model_name.split(":", 1)
131
+
132
+ if len(model_name_parts) == 2 and model_name_parts[0] in PROVIDERS:
133
+ api_provider, api_model_name = model_name_parts
134
+ if api_provider not in PROVIDERS:
135
+ raise ValueError(
136
+ f"API provider '{api_provider}' is not supported. "
137
+ f"Supported providers are: {', '.join(PROVIDERS.keys())}"
138
+ )
130
139
 
131
- api_provider = model_name.split(":", 1)[0]
132
- api_model_name = model_name.split(":", 1)[-1]
133
- if api_provider not in PROVIDERS:
134
- raise ValueError(
135
- f"API provider '{api_provider}' is not supported. "
136
- f"Supported providers are: {', '.join(PROVIDERS.keys())}"
140
+ self._api_provider: APIProvider | None = api_provider
141
+ self._api_model_name: str = api_model_name
142
+ self._base_url: str | None = PROVIDERS[api_provider]["base_url"]
143
+ self._api_key: str | None = PROVIDERS[api_provider]["api_key"]
144
+ self._struct_outputs_support: bool = any(
145
+ fnmatch.fnmatch(self._model_name, pat)
146
+ for pat in PROVIDERS[api_provider]["struct_outputs_support"]
137
147
  )
138
- self._api_provider: APIProvider = api_provider
139
- self._api_model_name: str = api_model_name
140
148
 
141
- self._struct_outputs_support: bool = any(
142
- fnmatch.fnmatch(self._model_name, pat)
143
- for pat in PROVIDERS[api_provider]["struct_outputs_support"]
144
- )
149
+ else:
150
+ self._api_provider = None
151
+ self._api_model_name = model_name
152
+ self._base_url = None
153
+ self._api_key = None
154
+ self._struct_outputs_support = False
155
+
145
156
  if (
146
157
  self._llm_settings.get("use_struct_outputs")
147
158
  and not self._struct_outputs_support
@@ -161,9 +172,6 @@ class CloudLLM(LLM[SettingsT_co, ConvertT_co], Generic[SettingsT_co, ConvertT_co
161
172
  )
162
173
  )
163
174
  self.no_tqdm = no_tqdm
164
-
165
- self._base_url: str = PROVIDERS[api_provider]["base_url"]
166
- self._api_key: str | None = PROVIDERS[api_provider]["api_key"]
167
175
  self._client: Any
168
176
 
169
177
  self._async_http_client: httpx.AsyncClient | None = None
@@ -178,7 +186,7 @@ class CloudLLM(LLM[SettingsT_co, ConvertT_co], Generic[SettingsT_co, ConvertT_co
178
186
  self.num_generation_retries = num_generation_retries
179
187
 
180
188
  @property
181
- def api_provider(self) -> APIProvider:
189
+ def api_provider(self) -> APIProvider | None:
182
190
  return self._api_provider
183
191
 
184
192
  @property
@@ -80,6 +80,7 @@ class OpenAILLM(CloudLLM[OpenAILLMSettings, OpenAIConverters]):
80
80
  dict[str, Any] | AsyncHTTPClientParams | None
81
81
  ) = None,
82
82
  async_openai_client_params: dict[str, Any] | None = None,
83
+ client: AsyncOpenAI | None = None,
83
84
  # Rate limiting
84
85
  rate_limiter: (RateLimiterC[Messages, AssistantMessage] | None) = None,
85
86
  rate_limiter_rpm: float | None = None,
@@ -117,11 +118,14 @@ class OpenAILLM(CloudLLM[OpenAILLMSettings, OpenAIConverters]):
117
118
  _async_openai_client_params["http_client"] = self._async_http_client
118
119
 
119
120
  # TODO: context manager for async client
120
- self._client: AsyncOpenAI = AsyncOpenAI(
121
- base_url=self._base_url,
122
- api_key=self._api_key,
123
- **_async_openai_client_params,
124
- )
121
+ if client:
122
+ self._client = client
123
+ else:
124
+ self._client: AsyncOpenAI = AsyncOpenAI(
125
+ base_url=self._base_url,
126
+ api_key=self._api_key,
127
+ **_async_openai_client_params,
128
+ )
125
129
 
126
130
  async def _get_completion(
127
131
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: grasp_agents
3
- Version: 0.3.5
3
+ Version: 0.3.6
4
4
  Summary: Grasp Agents Library
5
5
  License-File: LICENSE.md
6
6
  Requires-Python: <4,>=3.11.4
@@ -1,5 +1,5 @@
1
1
  grasp_agents/__init__.py,sha256=CIsyUasb9HBC3M4olg6ATAwKXtVNmmtpyGJrt7hpZW4,947
2
- grasp_agents/cloud_llm.py,sha256=Psta1FH0YpBUxLnQJ55KUS5o7-eMR-uxrAP_AEUbupk,13427
2
+ grasp_agents/cloud_llm.py,sha256=S3yl-bKhAyThs5drHS_hmkmWa_mTlaC-guTX84v6KXM,13798
3
3
  grasp_agents/comm_processor.py,sha256=YzvvHgrSrgn1oXEpkGXNrAtogFyq6gpS0UrVMBO7LBY,6722
4
4
  grasp_agents/costs_dict.yaml,sha256=2MFNWtkv5W5WSCcv1Cj13B1iQLVv5Ot9pS_KW2Gu2DA,2510
5
5
  grasp_agents/generics_utils.py,sha256=5Pw3I9dlnKC2VGqYKC4ZZUO3Z_vTNT-NPFovNfPkl6I,6542
@@ -25,7 +25,7 @@ grasp_agents/openai/completion_converters.py,sha256=vzPEkUOX4l2hobKxZjEk_dyWfzeY
25
25
  grasp_agents/openai/content_converters.py,sha256=r1D5uci5x7sbDyl0XN27y-l_jVigCauJruvSdZSnZcc,2510
26
26
  grasp_agents/openai/converters.py,sha256=ncscVyPnPMMbyxAfFX3U73lnr_BZU-I89HA5Ld8BuxI,4691
27
27
  grasp_agents/openai/message_converters.py,sha256=_fG4vI42rBzoajuC5iYgnUBalg8cQ1ckSt8xFBOuWVY,4111
28
- grasp_agents/openai/openai_llm.py,sha256=sd1nE5eLUMA8NBqUkSwo_BTfyEBmp9j7Gpuf_s0abw4,7961
28
+ grasp_agents/openai/openai_llm.py,sha256=Hm2S2yyrR3cRvH20YHRegoTEYaetbx_USxI8CXIhfro,8091
29
29
  grasp_agents/openai/tool_converters.py,sha256=d_7edJbnUhfSs2-F4J20D71UjVJWIslsXwMyac7-v2Q,1246
30
30
  grasp_agents/rate_limiting/__init__.py,sha256=KRgtF_E7R3YfA2cpYcFcZ7wycV0pWVJ0xRQC7YhiIEQ,158
31
31
  grasp_agents/rate_limiting/rate_limiter_chunked.py,sha256=BPgkUXvhmZhTpZs2T6uujNFuxH_kYHiISuf6_-eNhUc,5544
@@ -45,7 +45,7 @@ grasp_agents/workflow/looped_workflow.py,sha256=QqXclXYxsW6C8Rxkf3dRaMHi-DfCvCbj
45
45
  grasp_agents/workflow/parallel_processor.py,sha256=Xyzs2UR_mRe2GFgzzadHOhqgMu3rFjd3GUjvmZimt_k,3505
46
46
  grasp_agents/workflow/sequential_workflow.py,sha256=Pl7jl9ZVDu-rC5UMfympEaQN8iG3kZurVF5eIPG62XA,2130
47
47
  grasp_agents/workflow/workflow_processor.py,sha256=2-iaDIlgNXgj-ClGbiE3fYfSv-N_qRC49Gf_dF6M_40,2640
48
- grasp_agents-0.3.5.dist-info/METADATA,sha256=O_mAQKcTBjZB5H9UoINxgkbnQyUUJE8TBEDSmFaEBVc,6806
49
- grasp_agents-0.3.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
50
- grasp_agents-0.3.5.dist-info/licenses/LICENSE.md,sha256=-nNNdWqGB8gJ2O-peFQ2Irshv5tW5pHKyTcYkwvH7CE,1201
51
- grasp_agents-0.3.5.dist-info/RECORD,,
48
+ grasp_agents-0.3.6.dist-info/METADATA,sha256=kwdiPSqyVZ1B3kjjQFbyDDzdm0eokb6k0krwHqZWQ0s,6806
49
+ grasp_agents-0.3.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
50
+ grasp_agents-0.3.6.dist-info/licenses/LICENSE.md,sha256=-nNNdWqGB8gJ2O-peFQ2Irshv5tW5pHKyTcYkwvH7CE,1201
51
+ grasp_agents-0.3.6.dist-info/RECORD,,