opengradient 0.4.5__py3-none-any.whl → 0.4.7__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.
opengradient/__init__.py CHANGED
@@ -6,7 +6,18 @@ from typing import Any, Dict, List, Optional, Tuple, Union
6
6
 
7
7
  from .client import Client
8
8
  from .defaults import DEFAULT_INFERENCE_CONTRACT_ADDRESS, DEFAULT_RPC_URL
9
- from .types import LLM, TEE_LLM, HistoricalInputQuery, InferenceMode, LlmInferenceMode, SchedulerParams
9
+ from .types import (
10
+ LLM,
11
+ TEE_LLM,
12
+ HistoricalInputQuery,
13
+ SchedulerParams,
14
+ CandleType,
15
+ CandleOrder,
16
+ InferenceMode,
17
+ LlmInferenceMode,
18
+ TextGenerationOutput,
19
+ ModelOutput,
20
+ )
10
21
 
11
22
  from . import llm, alphasense
12
23
 
@@ -14,15 +25,19 @@ _client = None
14
25
 
15
26
 
16
27
  def new_client(
17
- email: str, password: str, private_key: str, rpc_url=DEFAULT_RPC_URL, contract_address=DEFAULT_INFERENCE_CONTRACT_ADDRESS
28
+ email: Optional[str],
29
+ password: Optional[str],
30
+ private_key: str,
31
+ rpc_url=DEFAULT_RPC_URL,
32
+ contract_address=DEFAULT_INFERENCE_CONTRACT_ADDRESS,
18
33
  ) -> Client:
19
34
  """
20
35
  Creates a unique OpenGradient client instance with the given authentication and network settings.
21
36
 
22
37
  Args:
23
- email: User's email address for authentication
24
- password: User's password for authentication
25
- private_key: Ethereum private key for blockchain transactions
38
+ email: User's email address for authentication with Model Hub
39
+ password: User's password for authentication with Model Hub
40
+ private_key: Private key for OpenGradient transactions
26
41
  rpc_url: Optional RPC URL for the blockchain network, defaults to mainnet
27
42
  contract_address: Optional inference contract address
28
43
  """
@@ -65,7 +80,7 @@ def upload(model_path, model_name, version):
65
80
  return _client.upload(model_path, model_name, version)
66
81
 
67
82
 
68
- def create_model(model_name: str, model_desc: str, model_path: str = None):
83
+ def create_model(model_name: str, model_desc: str, model_path: Optional[str] = None):
69
84
  """Create a new model repository.
70
85
 
71
86
  Args:
@@ -121,7 +136,7 @@ def infer(model_cid, inference_mode, model_input, max_retries: Optional[int] = N
121
136
  max_retries: Maximum number of retries for failed transactions
122
137
 
123
138
  Returns:
124
- Tuple[str, Any]: Transaction hash and model output
139
+ InferenceResult: Transaction hash and model output
125
140
 
126
141
  Raises:
127
142
  RuntimeError: If SDK is not initialized
@@ -134,12 +149,12 @@ def infer(model_cid, inference_mode, model_input, max_retries: Optional[int] = N
134
149
  def llm_completion(
135
150
  model_cid: LLM,
136
151
  prompt: str,
137
- inference_mode: str = LlmInferenceMode.VANILLA,
152
+ inference_mode: LlmInferenceMode = LlmInferenceMode.VANILLA,
138
153
  max_tokens: int = 100,
139
154
  stop_sequence: Optional[List[str]] = None,
140
155
  temperature: float = 0.0,
141
156
  max_retries: Optional[int] = None,
142
- ) -> Tuple[str, str]:
157
+ ) -> TextGenerationOutput:
143
158
  """Generate text completion using an LLM.
144
159
 
145
160
  Args:
@@ -152,7 +167,7 @@ def llm_completion(
152
167
  max_retries: Maximum number of retries for failed transactions
153
168
 
154
169
  Returns:
155
- Tuple[str, str]: Transaction hash and generated text
170
+ TextGenerationOutput: Transaction hash and generated text
156
171
 
157
172
  Raises:
158
173
  RuntimeError: If SDK is not initialized
@@ -173,14 +188,14 @@ def llm_completion(
173
188
  def llm_chat(
174
189
  model_cid: LLM,
175
190
  messages: List[Dict],
176
- inference_mode: str = LlmInferenceMode.VANILLA,
191
+ inference_mode: LlmInferenceMode = LlmInferenceMode.VANILLA,
177
192
  max_tokens: int = 100,
178
193
  stop_sequence: Optional[List[str]] = None,
179
194
  temperature: float = 0.0,
180
195
  tools: Optional[List[Dict]] = None,
181
196
  tool_choice: Optional[str] = None,
182
197
  max_retries: Optional[int] = None,
183
- ) -> Tuple[str, str, Dict]:
198
+ ) -> TextGenerationOutput:
184
199
  """Have a chat conversation with an LLM.
185
200
 
186
201
  Args:
@@ -195,7 +210,7 @@ def llm_chat(
195
210
  max_retries: Maximum number of retries for failed transactions
196
211
 
197
212
  Returns:
198
- Tuple[str, str, Dict]: Transaction hash, model response, and metadata
213
+ TextGenerationOutput
199
214
 
200
215
  Raises:
201
216
  RuntimeError: If SDK is not initialized
@@ -215,24 +230,6 @@ def llm_chat(
215
230
  )
216
231
 
217
232
 
218
- def login(email: str, password: str):
219
- """Login to OpenGradient.
220
-
221
- Args:
222
- email: User's email address
223
- password: User's password
224
-
225
- Returns:
226
- dict: Login response with authentication tokens
227
-
228
- Raises:
229
- RuntimeError: If SDK is not initialized
230
- """
231
- if _client is None:
232
- raise RuntimeError("OpenGradient client not initialized. Call og.init() first.")
233
- return _client.login(email, password)
234
-
235
-
236
233
  def list_files(model_name: str, version: str) -> List[Dict]:
237
234
  """List files in a model repository version.
238
235
 
@@ -251,32 +248,11 @@ def list_files(model_name: str, version: str) -> List[Dict]:
251
248
  return _client.list_files(model_name, version)
252
249
 
253
250
 
254
- def generate_image(model: str, prompt: str, height: Optional[int] = None, width: Optional[int] = None) -> bytes:
255
- """Generate an image from a text prompt.
256
-
257
- Args:
258
- model: Model identifier (e.g. "stabilityai/stable-diffusion-xl-base-1.0")
259
- prompt: Text description of the desired image
260
- height: Optional height of the generated image in pixels
261
- width: Optional width of the generated image in pixels
262
-
263
- Returns:
264
- bytes: Raw image data as bytes
265
-
266
- Raises:
267
- RuntimeError: If SDK is not initialized
268
- OpenGradientError: If image generation fails
269
- """
270
- if _client is None:
271
- raise RuntimeError("OpenGradient client not initialized. Call og.init() first.")
272
- return _client.generate_image(model, prompt, height=height, width=width)
273
-
274
-
275
251
  def new_workflow(
276
252
  model_cid: str,
277
- input_query: Union[Dict[str, Any], HistoricalInputQuery],
253
+ input_query: HistoricalInputQuery,
278
254
  input_tensor_name: str,
279
- scheduler_params: Optional[Union[Dict[str, int], SchedulerParams]] = None,
255
+ scheduler_params: Optional[SchedulerParams] = None,
280
256
  ) -> str:
281
257
  """
282
258
  Deploy a new workflow contract with the specified parameters.
@@ -287,13 +263,9 @@ def new_workflow(
287
263
 
288
264
  Args:
289
265
  model_cid: IPFS CID of the model
290
- input_query: Dictionary or HistoricalInputQuery containing query parameters
266
+ input_query: HistoricalInputQuery containing query parameters
291
267
  input_tensor_name: Name of the input tensor
292
- scheduler_params: Optional scheduler configuration:
293
- - Can be a dictionary with:
294
- - frequency: Execution frequency in seconds (default: 600)
295
- - duration_hours: How long to run in hours (default: 2)
296
- - Or a SchedulerParams instance
268
+ scheduler_params: Optional scheduler configuration as SchedulerParams instance
297
269
  If not provided, the workflow will be deployed without scheduling.
298
270
 
299
271
  Returns:
@@ -303,15 +275,12 @@ def new_workflow(
303
275
  if _client is None:
304
276
  raise RuntimeError("OpenGradient client not initialized. Call og.init(...) first.")
305
277
 
306
- # Convert scheduler_params if it's a dict, otherwise use as is
307
- scheduler = SchedulerParams.from_dict(scheduler_params) if isinstance(scheduler_params, dict) else scheduler_params
308
-
309
278
  return _client.new_workflow(
310
- model_cid=model_cid, input_query=input_query, input_tensor_name=input_tensor_name, scheduler_params=scheduler
279
+ model_cid=model_cid, input_query=input_query, input_tensor_name=input_tensor_name, scheduler_params=scheduler_params
311
280
  )
312
281
 
313
282
 
314
- def read_workflow_result(contract_address: str) -> Dict[str, Union[str, Dict]]:
283
+ def read_workflow_result(contract_address: str) -> ModelOutput:
315
284
  """
316
285
  Reads the latest inference result from a deployed workflow contract.
317
286
 
@@ -335,7 +304,7 @@ def read_workflow_result(contract_address: str) -> Dict[str, Union[str, Dict]]:
335
304
  return _client.read_workflow_result(contract_address)
336
305
 
337
306
 
338
- def run_workflow(contract_address: str) -> Dict[str, Union[str, Dict]]:
307
+ def run_workflow(contract_address: str) -> ModelOutput:
339
308
  """
340
309
  Executes the workflow by calling run() on the contract to pull latest data and perform inference.
341
310
 
@@ -350,8 +319,23 @@ def run_workflow(contract_address: str) -> Dict[str, Union[str, Dict]]:
350
319
  return _client.run_workflow(contract_address)
351
320
 
352
321
 
322
+ def read_workflow_history(contract_address: str, num_results: int) -> List[Dict]:
323
+ """
324
+ Gets historical inference results from a workflow contract.
325
+
326
+ Args:
327
+ contract_address (str): Address of the deployed workflow contract
328
+ num_results (int): Number of historical results to retrieve
329
+
330
+ Returns:
331
+ List[Dict]: List of historical inference results
332
+ """
333
+ if _client is None:
334
+ raise RuntimeError("OpenGradient client not initialized. Call og.init() first.")
335
+ return _client.read_workflow_history(contract_address, num_results)
336
+
337
+
353
338
  __all__ = [
354
- "generate_image",
355
339
  "list_files",
356
340
  "login",
357
341
  "llm_chat",
@@ -366,6 +350,14 @@ __all__ = [
366
350
  "new_workflow",
367
351
  "read_workflow_result",
368
352
  "run_workflow",
353
+ "read_workflow_history",
354
+ "InferenceMode",
355
+ "LlmInferenceMode",
356
+ "HistoricalInputQuery",
357
+ "SchedulerParams",
358
+ "CandleType",
359
+ "CandleOrder",
360
+ "InferenceMode",
369
361
  "llm",
370
362
  "alphasense",
371
363
  ]
@@ -0,0 +1 @@
1
+ [{"inputs":[{"internalType":"string","name":"_modelId","type":"string"},{"internalType":"string","name":"_inputName","type":"string"},{"components":[{"internalType":"string","name":"base","type":"string"},{"internalType":"string","name":"quote","type":"string"},{"internalType":"uint32","name":"total_candles","type":"uint32"},{"internalType":"uint32","name":"candle_duration_in_mins","type":"uint32"},{"internalType":"enum CandleOrder","name":"order","type":"uint8"},{"internalType":"enum CandleType[]","name":"candle_types","type":"uint8[]"}],"internalType":"struct HistoricalInputQuery","name":"_query","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"int128","name":"value","type":"int128"},{"internalType":"int128","name":"decimals","type":"int128"}],"internalType":"struct TensorLib.Number[]","name":"values","type":"tuple[]"},{"internalType":"uint32[]","name":"shape","type":"uint32[]"}],"internalType":"struct TensorLib.MultiDimensionalNumberTensor[]","name":"numbers","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"internalType":"struct TensorLib.StringTensor[]","name":"strings","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct TensorLib.JsonScalar[]","name":"jsons","type":"tuple[]"},{"internalType":"bool","name":"is_simulation_result","type":"bool"}],"indexed":false,"internalType":"struct ModelOutput","name":"result","type":"tuple"}],"name":"InferenceResultEmitted","type":"event"},{"inputs":[],"name":"getInferenceResult","outputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"int128","name":"value","type":"int128"},{"internalType":"int128","name":"decimals","type":"int128"}],"internalType":"struct TensorLib.Number[]","name":"values","type":"tuple[]"},{"internalType":"uint32[]","name":"shape","type":"uint32[]"}],"internalType":"struct TensorLib.MultiDimensionalNumberTensor[]","name":"numbers","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"internalType":"struct TensorLib.StringTensor[]","name":"strings","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct TensorLib.JsonScalar[]","name":"jsons","type":"tuple[]"},{"internalType":"bool","name":"is_simulation_result","type":"bool"}],"internalType":"struct ModelOutput","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"getLastInferenceResults","outputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"components":[{"internalType":"int128","name":"value","type":"int128"},{"internalType":"int128","name":"decimals","type":"int128"}],"internalType":"struct TensorLib.Number[]","name":"values","type":"tuple[]"},{"internalType":"uint32[]","name":"shape","type":"uint32[]"}],"internalType":"struct TensorLib.MultiDimensionalNumberTensor[]","name":"numbers","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"internalType":"struct TensorLib.StringTensor[]","name":"strings","type":"tuple[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct TensorLib.JsonScalar[]","name":"jsons","type":"tuple[]"},{"internalType":"bool","name":"is_simulation_result","type":"bool"}],"internalType":"struct ModelOutput[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"historicalContract","outputs":[{"internalType":"contract OGHistorical","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inputName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inputQuery","outputs":[{"internalType":"string","name":"base","type":"string"},{"internalType":"string","name":"quote","type":"string"},{"internalType":"uint32","name":"total_candles","type":"uint32"},{"internalType":"uint32","name":"candle_duration_in_mins","type":"uint32"},{"internalType":"enum CandleOrder","name":"order","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modelId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"run","outputs":[],"stateMutability":"nonpayable","type":"function"}]
@@ -0,0 +1,13 @@
1
+ [
2
+ {
3
+ "inputs": [
4
+ {"internalType": "address", "name": "contractAddress", "type": "address"},
5
+ {"internalType": "uint256", "name": "endTime", "type": "uint256"},
6
+ {"internalType": "uint256", "name": "frequency", "type": "uint256"}
7
+ ],
8
+ "name": "registerTask",
9
+ "outputs": [],
10
+ "stateMutability": "nonpayable",
11
+ "type": "function"
12
+ }
13
+ ]
@@ -12,7 +12,7 @@ def create_read_workflow_tool(
12
12
  tool_name: str,
13
13
  tool_description: str,
14
14
  output_formatter: Callable[..., str] = lambda x: x,
15
- ) -> BaseTool:
15
+ ) -> BaseTool | Callable:
16
16
  """
17
17
  Creates a tool that reads results from a workflow contract on OpenGradient.
18
18
 
@@ -1,5 +1,5 @@
1
1
  from enum import Enum
2
- from typing import Any, Callable, Dict, Type
2
+ from typing import Any, Callable, Dict, Type, Optional
3
3
 
4
4
  from langchain_core.tools import BaseTool, StructuredTool
5
5
  from pydantic import BaseModel
@@ -14,10 +14,10 @@ def create_run_model_tool(
14
14
  tool_name: str,
15
15
  input_getter: Callable,
16
16
  output_formatter: Callable[..., str] = lambda x: x,
17
- input_schema: Type[BaseModel] = None,
17
+ input_schema: Optional[Type[BaseModel]] = None,
18
18
  tool_description: str = "Executes the given ML model",
19
19
  inference_mode: og.InferenceMode = og.InferenceMode.VANILLA,
20
- ) -> BaseTool:
20
+ ) -> BaseTool | Callable:
21
21
  """
22
22
  Creates a tool that wraps an OpenGradient model for inference.
23
23
 
@@ -0,0 +1 @@
1
+ 60a0604052346100405761001a610014610389565b91610a62565b610022610045565b61460c610a928239608051818181610b7401526144c0015261460c90f35b61004b565b60405190565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b906100779061004f565b810190811060018060401b0382111761008f57604052565b610059565b906100a76100a0610045565b928361006d565b565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b60018060401b0381116100d5576100d160209161004f565b0190565b610059565b90825f9392825e0152565b909291926100fa6100f5826100b9565b610094565b9381855260208501908284011161011657610114926100da565b565b6100b5565b9080601f8301121561013957816020610136935191016100e5565b90565b6100b1565b5f80fd5b5f80fd5b63ffffffff1690565b61015881610146565b0361015f57565b5f80fd5b905051906101708261014f565b565b6002111561017c57565b5f80fd5b9050519061018d82610172565b565b60018060401b0381116101a55760208091020190565b610059565b5f80fd5b600511156101b857565b5f80fd5b905051906101c9826101ae565b565b909291926101e06101db8261018f565b610094565b938185526020808601920283019281841161021d57915b8383106102045750505050565b6020809161021284866101bc565b8152019201916101f7565b6101aa565b9080601f830112156102405781602061023d935191016101cb565b90565b6100b1565b91909160c0818403126103095761025c60c0610094565b925f82015160018060401b038111610304578161027a91840161011b565b5f850152602082015160018060401b0381116102ff578161029c91840161011b565b60208501526102ae8160408401610163565b60408501526102c08160608401610163565b60608501526102d28160808401610180565b608085015260a082015160018060401b0381116102fa576102f39201610222565b60a0830152565b610142565b610142565b610142565b61013e565b91606083830312610384575f83015160018060401b03811161037f578261033691850161011b565b92602081015160018060401b03811161037a578361035591830161011b565b92604082015160018060401b038111610375576103729201610245565b90565b6100ad565b6100ad565b6100ad565b6100a9565b6103a761509e8038038061039c81610094565b92833981019061030e565b909192565b5190565b634e487b7160e01b5f52602260045260245ffd5b90600160028304921680156103e4575b60208310146103df57565b6103b0565b91607f16916103d4565b5f5260205f2090565b601f602091010490565b1b90565b9190600861042091029161041a5f1984610401565b92610401565b9181191691161790565b90565b90565b61044461043f6104499261042a565b61042d565b61042a565b90565b90565b919061046561046061046d93610430565b61044c565b908354610405565b9055565b5f90565b61048791610481610471565b9161044f565b565b5b818110610495575050565b806104a25f600193610475565b0161048a565b9190601f81116104b8575b505050565b6104c46104e9936103ee565b9060206104d0846103f7565b830193106104f1575b6104e2906103f7565b0190610489565b5f80806104b3565b91506104e2819290506104d9565b1c90565b90610513905f19906008026104ff565b191690565b8161052291610503565b906002021790565b90610534816103ac565b9060018060401b0382116105f2576105568261055085546103c4565b856104a8565b602090601f831160011461058a57918091610579935f9261057e575b5050610518565b90555b565b90915001515f80610572565b601f19831691610599856103ee565b925f5b8181106105da575091600293918560019694106105c0575b5050500201905561057c565b6105d0910151601f841690610503565b90555f80806105b4565b9193602060018192878701518155019501920161059c565b610059565b906106019161052a565b565b60018060a01b031690565b61062261061d61062792610603565b61042d565b610603565b90565b6106339061060e565b90565b61063f9061062a565b90565b5190565b6106509051610146565b90565b5f1b90565b9061066763ffffffff91610653565b9181191691161790565b61068561068061068a92610146565b61042d565b610146565b90565b90565b906106a56106a06106ac92610671565b61068d565b8254610658565b9055565b60201b90565b906106c967ffffffff00000000916106b0565b9181191691161790565b906106e86106e36106ef92610671565b61068d565b82546106b6565b9055565b634e487b7160e01b5f52602160045260245ffd5b6002111561071157565b6106f3565b9061072082610707565b565b61072c9051610716565b90565b60401b90565b9061074968ff00000000000000009161072f565b9181191691161790565b61075c90610716565b90565b90565b9061077761077261077e92610753565b61075f565b8254610735565b9055565b5190565b5490565b60209060018203010490565b5f5260205f2090565b5b8181106107ab575050565b806107b85f600193610475565b016107a0565b906107d1905f19906020036008026104ff565b8154169055565b9190918282106107e8575b505050565b600160206107f86108209561078a565b61080a6108048661078a565b94610796565b93840193019306025f8111610828575b5061079f565b5f80806107e3565b61083590600183036107be565b5f61081a565b90680100000000000000008111610864578161085961086293610786565b908281556107d8565b565b610059565b5190565b6005111561087757565b6106f3565b906108868261086d565b565b610892905161087c565b90565b60200190565b919060086108b69102916108b060ff84610401565b92610401565b9181191691161790565b90565b906108cd81610869565b9060018060401b0382116109ae576108f16108f7916108ec848661083b565b610895565b92610796565b60208204915f5b83811061096657506020830290035f811161091a575b50505050565b925f935f5b8181106109345750505001555f808080610914565b909194602061095a60019261095061094b8a610888565b6108c0565b908585029061089b565b9601910191909161091f565b5f5f5b6020811061098057509060019181850155016108fe565b959060206109a560019261099b61099686610888565b6108c0565b908a85029061089b565b92019601610969565b610059565b906109bd916108c3565b565b90610a4e60a06003610a54946109e25f82016109dc5f8801610642565b906105f7565b6109fb600182016109f560208801610642565b906105f7565b610a1460028201610a0e60408801610646565b90610690565b610a2d60028201610a2760608801610646565b906106d3565b610a4660028201610a4060808801610722565b90610762565b019201610782565b906109b3565b565b90610a60916109bf565b565b610a8f9291610a74610a7b925f6105f7565b60016105f7565b610a8560f5610636565b6080526002610a56565b56fe60806040526004361015610013575b610c2f565b61001d5f3561008c565b80631b9fc7011461008757806343cdaad214610082578063554970111461007d5780639e30396c14610078578063c040622614610073578063c4c71aac1461006e5763df958cf60361000e57610bfa565b610b39565b610996565b61095c565b6107e3565b61079f565b6105a0565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f9103126100aa57565b61009c565b5190565b60209181520190565b60200190565b5190565b60209181520190565b90825f9392825e0152565b601f801991011690565b61010361010c602093610111936100fa816100c2565b938480936100c6565b958691016100cf565b6100da565b0190565b5190565b60209181520190565b60200190565b600f0b90565b61013790610128565b9052565b9060208061015d936101535f8201515f86019061012e565b015191019061012e565b565b9061016c8160409361013b565b0190565b60200190565b9061019361018d61018684610115565b8093610119565b92610122565b905f5b8181106101a35750505090565b9091926101bc6101b6600192865161015f565b94610170565b9101919091610196565b5190565b60209181520190565b60200190565b63ffffffff1690565b6101eb906101d9565b9052565b906101fc816020936101e2565b0190565b60200190565b9061022361021d610216846101c6565b80936101ca565b926101d3565b905f5b8181106102335750505090565b90919261024c61024660019286516101ef565b94610200565b9101919091610226565b610299916040610288610276606084015f8601518582035f8701526100e4565b60208501518482036020860152610176565b920151906040818403910152610206565b90565b906102a691610256565b90565b60200190565b906102c36102bc836100af565b80926100b3565b90816102d4602083028401946100bc565b925f915b8383106102e757505050505090565b909192939460206103096103038385600195038752895161029c565b976102a9565b93019301919392906102d8565b5190565b60209181520190565b60200190565b5190565b60209181520190565b60200190565b90610346916100e4565b90565b60200190565b9061036361035c83610329565b809261032d565b908161037460208302840194610336565b925f915b83831061038757505050505090565b909192939460206103a96103a38385600195038752895161033c565b97610349565b9301930191939290610378565b6103e49160206103d3604083015f8501518482035f8601526100e4565b92015190602081840391015261034f565b90565b906103f1916103b6565b90565b60200190565b9061040e61040783610316565b809261031a565b908161041f60208302840194610323565b925f915b83831061043257505050505090565b9091929394602061045461044e838560019503875289516103e7565b976103f4565b9301930191939290610423565b5190565b60209181520190565b60200190565b6104a2916020610491604083015f8501518482035f8601526100e4565b9201519060208184039101526100e4565b90565b906104af91610474565b90565b60200190565b906104cc6104c583610461565b8092610465565b90816104dd6020830284019461046e565b925f915b8383106104f057505050505090565b9091929394602061051261050c838560019503875289516104a5565b976104b2565b93019301919392906104e1565b151590565b61052d9061051f565b9052565b906105859060608061057a610568610556608086015f8901518782035f8901526102af565b602088015186820360208801526103fa565b604087015185820360408701526104b8565b940151910190610524565b90565b61059d9160208201915f818403910152610531565b90565b346105d0576105b03660046100a0565b6105cc6105bb611519565b6105c3610092565b91829182610588565b0390f35b610098565b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52602260045260245ffd5b906001600283049216801561061c575b602083101461061757565b6105e8565b91607f169161060c565b5f5260205f2090565b905f9291805490610649610642836105fc565b80946100c6565b916001811690815f146106a05750600114610664575b505050565b6106719192939450610626565b915f925b81841061068857505001905f808061065f565b60018160209295939554848601520191019290610675565b92949550505060ff19168252151560200201905f808061065f565b906106c59161062f565b90565b634e487b7160e01b5f52604160045260245ffd5b906106e6906100da565b810190811067ffffffffffffffff82111761070057604052565b6106c8565b9061072561071e92610715610092565b938480926106bb565b03836106dc565b565b905f1061073a5761073790610705565b90565b6105d5565b61074a5f5f90610727565b90565b60209181520190565b61077561077e6020936107839361076c816100c2565b9384809361074d565b958691016100cf565b6100da565b0190565b61079c9160208201915f818403910152610756565b90565b346107cf576107af3660046100a0565b6107cb6107ba61073f565b6107c2610092565b91829182610787565b0390f35b610098565b6107e060015f90610727565b90565b34610813576107f33660046100a0565b61080f6107fe6107d4565b610806610092565b91829182610787565b0390f35b610098565b5f80fd5b90565b6108288161081c565b0361082f57565b5f80fd5b905035906108408261081f565b565b9060208282031261085b57610858915f01610833565b90565b61009c565b5190565b60209181520190565b60200190565b906108c7906060806108bc6108aa610898608086015f8901518782035f8901526102af565b602088015186820360208801526103fa565b604087015185820360408701526104b8565b940151910190610524565b90565b906108d491610873565b90565b60200190565b906108f16108ea83610860565b8092610864565b90816109026020830284019461086d565b925f915b83831061091557505050505090565b90919293946020610937610931838560019503875289516108ca565b976108d7565b9301930191939290610906565b6109599160208201915f8184039101526108dd565b90565b3461098c57610988610977610972366004610842565b61179a565b61097f610092565b91829182610944565b0390f35b610098565b5f0190565b346109c4576109a63660046100a0565b6109ae6144bb565b6109b6610092565b806109c081610991565b0390f35b610098565b5f1c90565b63ffffffff1690565b6109e36109e8916109c9565b6109ce565b90565b6109f590546109d7565b90565b60201c90565b610a0a610a0f916109f8565b6109ce565b90565b610a1c90546109fe565b90565b60401c90565b60ff1690565b610a37610a3c91610a1f565b610a25565b90565b610a499054610a2b565b90565b6002610a595f8201610705565b91610a6660018301610705565b91610a73600282016109eb565b91610a8b6002610a84818501610a12565b9301610a3f565b90565b610a97906101d9565b9052565b634e487b7160e01b5f52602160045260245ffd5b60021115610ab957565b610a9b565b90610ac882610aaf565b565b610ad390610abe565b90565b610adf90610aca565b9052565b90610b3794610b26610b1b608095610b0d610b30959b9a989b60a08801908882035f8a0152610756565b908682036020880152610756565b986040850190610a8e565b6060830190610a8e565b0190610ad6565b565b34610b6d57610b493660046100a0565b610b69610b54610a4c565b91610b60959395610092565b95869586610ae3565b0390f35b610098565b7f000000000000000000000000000000000000000000000000000000000000000090565b60018060a01b031690565b90565b610bb8610bb3610bbd92610b96565b610ba1565b610b96565b90565b610bc990610ba4565b90565b610bd590610bc0565b90565b610be190610bcc565b9052565b9190610bf8905f60208501940190610bd8565b565b34610c2a57610c0a3660046100a0565b610c26610c15610b72565b610c1d610092565b91829182610be5565b0390f35b610098565b5f80fd5b90610c46610c3f610092565b92836106dc565b565b610c526080610c33565b90565b606090565b606090565b606090565b5f90565b610c70610c48565b90602080808085610c7f610c55565b815201610c8a610c5a565b815201610c95610c5f565b815201610ca0610c64565b81525050565b610cae610c68565b90565b5490565b67ffffffffffffffff8111610ccd5760208091020190565b6106c8565b90610ce4610cdf83610cb5565b610c33565b918252565b5f5260205f2090565b52565b5490565b67ffffffffffffffff8111610d115760208091020190565b6106c8565b90610d28610d2383610cf9565b610c33565b918252565b5f5260205f2090565b600f0b90565b610d48610d4d916109c9565b610d36565b90565b610d5a9054610d3c565b90565b90610d6790610128565b9052565b60801c90565b610d7d610d8291610d6b565b610d36565b90565b610d8f9054610d71565b90565b610d9c6040610c33565b90565b90610dd5610dcc5f610daf610d92565b94610dc6610dbe838301610d50565b838801610d5d565b01610d85565b60208401610d5d565b565b610de090610d9f565b90565b90610ded82610cf5565b610df681610d16565b92610e046020850191610d2d565b5f915b838310610e145750505050565b600160208192610e2385610dd7565b815201920192019190610e07565b52565b5490565b5f5260205f2090565b610e4d610e5291610a1f565b6109ce565b90565b60601c90565b610e67610e6c91610e55565b6109ce565b90565b610e7b610e8091610d6b565b6109ce565b90565b60a01c90565b610e95610e9a91610e83565b6109ce565b90565b60c01c90565b610eaf610eb491610e9d565b6109ce565b90565b610ec3610ec89161008c565b6109ce565b90565b90600190610eeb610ee5610ede85610e34565b80936101ca565b93610e38565b5f92611055575b6001610eff575b50505090565b5490808310611033575b808310611011575b808310610fef575b808310610fcd575b808310610fab575b808310610f89575b808310610f67575b8210610f46575b80610ef9565b82610f5e60019394610f59602094610eb7565b6101e2565b0191015f610f40565b9192602081610f80600193610f7b86610ea3565b6101e2565b01930191610f39565b9192602081610fa2600193610f9d86610e89565b6101e2565b01930191610f31565b9192602081610fc4600193610fbf86610e6f565b6101e2565b01930191610f29565b9192602081610fe6600193610fe186610e5b565b6101e2565b01930191610f21565b919260208161100860019361100386610e41565b6101e2565b01930191610f19565b919260208161102a600193611025866109fe565b6101e2565b01930191610f11565b919260208161104c600193611047866109d7565b6101e2565b01930191610f09565b5b81600160080384011015610ef257926001602061110961110e600894838080808080808f549761108e816110898b6109d7565b6101e2565b016110a18161109c8a6109fe565b6101e2565b016110b4816110af89610e41565b6101e2565b016110c7816110c288610e5b565b6101e2565b016110da816110d587610e6f565b6101e2565b016110ed816110e886610e89565b6101e2565b01611100816110fb85610ea3565b6101e2565b01928391610eb7565b6101e2565b019401920191611056565b9061112391610ecb565b90565b9061114661113f92611136610092565b93848092611119565b03836106dc565b565b52565b6111556060610c33565b90565b906111a761119e600261116961114b565b946111806111785f8301610705565b5f8801610cf2565b61119861118f60018301610de3565b60208801610e31565b01611126565b60408401611148565b565b6111b290611158565b90565b906111bf82610cb1565b6111c881610cd2565b926111d66020850191610ce9565b5f915b8383106111e65750505050565b600360206001926111f6856111a9565b8152019201920191906111d9565b52565b5490565b67ffffffffffffffff81116112235760208091020190565b6106c8565b9061123a6112358361120b565b610c33565b918252565b5f5260205f2090565b5490565b67ffffffffffffffff81116112645760208091020190565b6106c8565b9061127b6112768361124c565b610c33565b918252565b5f5260205f2090565b61129290610705565b90565b9061129f82611248565b6112a881611269565b926112b66020850191611280565b5f915b8383106112c65750505050565b6001602081926112d585611289565b8152019201920191906112b9565b52565b6112f06040610c33565b90565b9061132a61132160016113046112e6565b9461131b6113135f8301610705565b5f8801610cf2565b01611295565b602084016112e3565b565b611335906112f3565b90565b9061134282611207565b61134b81611228565b92611359602085019161123f565b5f915b8383106113695750505050565b600260206001926113798561132c565b81520192019201919061135c565b52565b5490565b67ffffffffffffffff81116113a65760208091020190565b6106c8565b906113bd6113b88361138e565b610c33565b918252565b5f5260205f2090565b6113d56040610c33565b90565b9061140f61140660016113e96113cb565b946114006113f85f8301610705565b5f8801610cf2565b01610705565b60208401610cf2565b565b61141a906113d8565b90565b906114278261138a565b611430816113ab565b9261143e60208501916113c2565b5f915b83831061144e5750505050565b6002602060019261145e85611411565b815201920192019190611441565b52565b60ff1690565b611481611486916109c9565b61146f565b90565b6114939054611475565b90565b906114a09061051f565b9052565b9061150b61150260036114b5610c48565b946114cc6114c45f83016111b5565b5f8801611204565b6114e46114db60018301611338565b60208801611387565b6114fc6114f36002830161141d565b6040880161146c565b01611489565b60608401611496565b565b611516906114a4565b90565b611521610ca6565b5061152c600661150d565b90565b606090565b90565b61154b61154661155092611534565b610ba1565b61081c565b90565b60207f7665000000000000000000000000000000000000000000000000000000000000917f4e756d626572206f6620726573756c7473206d75737420626520706f736974695f8201520152565b6115ad602260409261074d565b6115b681611553565b0190565b6115cf9060208101905f8183039101526115a0565b90565b156115d957565b6115e1610092565b62461bcd60e51b8152806115f7600482016115ba565b0390fd5b90565b61160a61160f916109c9565b6115fb565b90565b61161c90546115fe565b90565b634e487b7160e01b5f52601160045260245ffd5b6116426116489193929361081c565b9261081c565b820391821161165357565b61161f565b90565b61166f61166a61167492611658565b610ba1565b61081c565b90565b61168661168c9193929361081c565b9261081c565b820180921161169757565b61161f565b67ffffffffffffffff81116116b45760208091020190565b6106c8565b906116cb6116c68361169c565b610c33565b918252565b6116d8610c68565b90565b5f5b8281106116e957505050565b6020906116f46116d0565b81840152016116dd565b9061172361170b836116b9565b92602080611719869361169c565b92019103906116db565b565b6001611731910161081c565b90565b61174861174361174d9261081c565b610ba1565b61081c565b90565b9061175a90611734565b5f5260205260405f2090565b634e487b7160e01b5f52603260045260245ffd5b9061178482610860565b811015611795576020809102010190565b611766565b6117a261152f565b506117bf816117b96117b35f611537565b9161081c565b116115d2565b806117db6117d56117d0600a611612565b61081c565b9161081c565b115f1461188e57506117ed600a611612565b5b906118166118066117ff600a611612565b8490611633565b611810600161165b565b90611677565b61181f836116fe565b916118295f611537565b5b8061183d6118378761081c565b9161081c565b1015611887576118829061187b611860600b61185a878590611677565b90611750565b8661186b849261150d565b611875838361177a565b5261177a565b5150611725565b61182a565b5092505090565b6117ee565b60e01b90565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b67ffffffffffffffff81116118cb576118c76020916100da565b0190565b6106c8565b909291926118e56118e0826118ad565b610c33565b93818552602085019082840111611901576118ff926100cf565b565b6118a9565b9080601f8301121561192457816020611921935191016118d0565b90565b6118a1565b61193281610128565b0361193957565b5f80fd5b9050519061194a82611929565b565b91906040838203126119865761197f906119666040610c33565b93611973825f830161193d565b5f86015260200161193d565b6020830152565b611899565b909291926119a061199b82610cf9565b610c33565b9381855260406020860192028301928184116119df57915b8383106119c55750505050565b60206040916119d4848661194c565b8152019201916119b8565b6118a5565b9080601f83011215611a02578160206119ff9351910161198b565b90565b6118a1565b67ffffffffffffffff8111611a1f5760208091020190565b6106c8565b611a2d816101d9565b03611a3457565b5f80fd5b90505190611a4582611a24565b565b90929192611a5c611a5782611a07565b610c33565b9381855260208086019202830192818411611a9957915b838310611a805750505050565b60208091611a8e8486611a38565b815201920191611a73565b6118a5565b9080601f83011215611abc57816020611ab993519101611a47565b90565b6118a1565b919091606081840312611b5557611ad86060610c33565b925f82015167ffffffffffffffff8111611b505781611af8918401611906565b5f850152602082015167ffffffffffffffff8111611b4b5781611b1c9184016119e4565b6020850152604082015167ffffffffffffffff8111611b4657611b3f9201611a9e565b6040830152565b61189d565b61189d565b61189d565b611899565b929190611b6e611b6982610cb5565b610c33565b9381855260208086019202810191838311611bc55781905b838210611b94575050505050565b815167ffffffffffffffff8111611bc057602091611bb58784938701611ac1565b815201910190611b86565b6118a1565b6118a5565b9080601f83011215611be857816020611be593519101611b5a565b90565b6118a1565b929190611c01611bfc8261124c565b610c33565b9381855260208086019202810191838311611c585781905b838210611c27575050505050565b815167ffffffffffffffff8111611c5357602091611c488784938701611906565b815201910190611c19565b6118a1565b6118a5565b9080601f83011215611c7b57816020611c7893519101611bed565b90565b6118a1565b919091604081840312611cea57611c976040610c33565b925f82015167ffffffffffffffff8111611ce55781611cb7918401611906565b5f850152602082015167ffffffffffffffff8111611ce057611cd99201611c5d565b6020830152565b61189d565b61189d565b611899565b929190611d03611cfe8261120b565b610c33565b9381855260208086019202810191838311611d5a5781905b838210611d29575050505050565b815167ffffffffffffffff8111611d5557602091611d4a8784938701611c80565b815201910190611d1b565b6118a1565b6118a5565b9080601f83011215611d7d57816020611d7a93519101611cef565b90565b6118a1565b919091604081840312611dec57611d996040610c33565b925f82015167ffffffffffffffff8111611de75781611db9918401611906565b5f850152602082015167ffffffffffffffff8111611de257611ddb9201611906565b6020830152565b61189d565b61189d565b611899565b929190611e05611e008261138e565b610c33565b9381855260208086019202810191838311611e5c5781905b838210611e2b575050505050565b815167ffffffffffffffff8111611e5757602091611e4c8784938701611d82565b815201910190611e1d565b6118a1565b6118a5565b9080601f83011215611e7f57816020611e7c93519101611df1565b90565b6118a1565b611e8d8161051f565b03611e9457565b5f80fd5b90505190611ea582611e84565b565b919091608081840312611f4e57611ebe6080610c33565b925f82015167ffffffffffffffff8111611f495781611ede918401611bca565b5f850152602082015167ffffffffffffffff8111611f445781611f02918401611d5f565b602085015260408201519167ffffffffffffffff8311611f3f57611f2b82611f38948301611e61565b6040860152606001611e98565b6060830152565b61189d565b61189d565b61189d565b611899565b90602082820312611f83575f82015167ffffffffffffffff8111611f7e57611f7b9201611ea7565b90565b610818565b61009c565b905f9291805490611fa2611f9b836105fc565b809461074d565b916001811690815f14611ff95750600114611fbd575b505050565b611fca9192939450610626565b915f925b818410611fe157505001905f8080611fb8565b60018160209295939554848601520191019290611fce565b92949550505060ff19168252151560200201905f8080611fb8565b61201d90610aca565b9052565b5490565b60209181520190565b5f5260205f2090565b6005111561204157565b610a9b565b9061205082612037565b565b61205b90612046565b90565b61206790612052565b9052565b60ff1690565b61207d612082916109c9565b61206b565b90565b60081c90565b61209761209c91612085565b61206b565b90565b60101c90565b6120b16120b69161209f565b61206b565b90565b60181c90565b6120cb6120d0916120b9565b61206b565b90565b6120df6120e4916109f8565b61206b565b90565b60281c90565b6120f96120fe916120e7565b61206b565b90565b60301c90565b61211361211891612101565b61206b565b90565b60381c90565b61212d6121329161211b565b61206b565b90565b61214161214691610a1f565b61206b565b90565b60481c90565b61215b61216091612149565b61206b565b90565b60501c90565b61217561217a91612163565b61206b565b90565b60581c90565b61218f6121949161217d565b61206b565b90565b6121a36121a891610e55565b61206b565b90565b60681c90565b6121bd6121c2916121ab565b61206b565b90565b60701c90565b6121d76121dc916121c5565b61206b565b90565b60781c90565b6121f16121f6916121df565b61206b565b90565b61220561220a91610d6b565b61206b565b90565b60881c90565b61221f6122249161220d565b61206b565b90565b60901c90565b61223961223e91612227565b61206b565b90565b60981c90565b61225361225891612241565b61206b565b90565b61226761226c91610e83565b61206b565b90565b60a81c90565b6122816122869161226f565b61206b565b90565b60b01c90565b61229b6122a091612289565b61206b565b90565b60b81c90565b6122b56122ba916122a3565b61206b565b90565b6122c96122ce91610e9d565b61206b565b90565b60c81c90565b6122e36122e8916122d1565b61206b565b90565b60d01c90565b6122fd612302916122eb565b61206b565b90565b60d81c90565b61231761231c91612305565b61206b565b90565b61232b6123309161008c565b61206b565b90565b60e81c90565b61234561234a91612333565b61206b565b90565b60f01c90565b61235f6123649161234d565b61206b565b90565b60f81c90565b61237961237e91612367565b61206b565b90565b906001906123a161239b61239485612021565b8093612025565b9361202e565b5f926128fb575b60016123b5575b50505090565b54908083106128d9575b8083106128b7575b808310612895575b808310612873575b808310612851575b80831061282f575b80831061280d575b8083106127eb575b8083106127c9575b8083106127a7575b808310612785575b808310612763575b808310612741575b80831061271f575b8083106126fd575b8083106126db575b8083106126b9575b808310612697575b808310612675575b808310612653575b808310612631575b80831061260f575b8083106125ed575b8083106125cb575b8083106125a9575b808310612587575b808310612565575b808310612543575b808310612521575b8083106124ff575b8083106124dd575b82106124bc575b806123af565b826124d4600193946124cf60209461236d565b61205e565b0191015f6124b6565b91926020816124f66001936124f186612353565b61205e565b019301916124af565b919260208161251860019361251386612339565b61205e565b019301916124a7565b919260208161253a6001936125358661231f565b61205e565b0193019161249f565b919260208161255c6001936125578661230b565b61205e565b01930191612497565b919260208161257e600193612579866122f1565b61205e565b0193019161248f565b91926020816125a060019361259b866122d7565b61205e565b01930191612487565b91926020816125c26001936125bd866122bd565b61205e565b0193019161247f565b91926020816125e46001936125df866122a9565b61205e565b01930191612477565b91926020816126066001936126018661228f565b61205e565b0193019161246f565b919260208161262860019361262386612275565b61205e565b01930191612467565b919260208161264a6001936126458661225b565b61205e565b0193019161245f565b919260208161266c60019361266786612247565b61205e565b01930191612457565b919260208161268e6001936126898661222d565b61205e565b0193019161244f565b91926020816126b06001936126ab86612213565b61205e565b01930191612447565b91926020816126d26001936126cd866121f9565b61205e565b0193019161243f565b91926020816126f46001936126ef866121e5565b61205e565b01930191612437565b9192602081612716600193612711866121cb565b61205e565b0193019161242f565b9192602081612738600193612733866121b1565b61205e565b01930191612427565b919260208161275a60019361275586612197565b61205e565b0193019161241f565b919260208161277c60019361277786612183565b61205e565b01930191612417565b919260208161279e60019361279986612169565b61205e565b0193019161240f565b91926020816127c06001936127bb8661214f565b61205e565b01930191612407565b91926020816127e26001936127dd86612135565b61205e565b019301916123ff565b91926020816128046001936127ff86612121565b61205e565b019301916123f7565b919260208161282660019361282186612107565b61205e565b019301916123ef565b9192602081612848600193612843866120ed565b61205e565b019301916123e7565b919260208161286a600193612865866120d3565b61205e565b019301916123df565b919260208161288c600193612887866120bf565b61205e565b019301916123d7565b91926020816128ae6001936128a9866120a5565b61205e565b019301916123cf565b91926020816128d06001936128cb8661208b565b61205e565b019301916123c7565b91926020816128f26001936128ed86612071565b61205e565b019301916123bf565b5b816001602003840110156123a857928354908061291883612071565b906129229161205e565b6020018061292f8361208b565b906129399161205e565b60200180612946836120a5565b906129509161205e565b6020018061295d836120bf565b906129679161205e565b60200180612974836120d3565b9061297e9161205e565b6020018061298b836120ed565b906129959161205e565b602001806129a283612107565b906129ac9161205e565b602001806129b983612121565b906129c39161205e565b602001806129d083612135565b906129da9161205e565b602001806129e78361214f565b906129f19161205e565b602001806129fe83612169565b90612a089161205e565b60200180612a1583612183565b90612a1f9161205e565b60200180612a2c83612197565b90612a369161205e565b60200180612a43836121b1565b90612a4d9161205e565b60200180612a5a836121cb565b90612a649161205e565b60200180612a71836121e5565b90612a7b9161205e565b60200180612a88836121f9565b90612a929161205e565b60200180612a9f83612213565b90612aa99161205e565b60200180612ab68361222d565b90612ac09161205e565b60200180612acd83612247565b90612ad79161205e565b60200180612ae48361225b565b90612aee9161205e565b60200180612afb83612275565b90612b059161205e565b60200180612b128361228f565b90612b1c9161205e565b60200180612b29836122a9565b90612b339161205e565b60200180612b40836122bd565b90612b4a9161205e565b60200180612b57836122d7565b90612b619161205e565b60200180612b6e836122f1565b90612b789161205e565b60200180612b858361230b565b90612b8f9161205e565b60200180612b9c8361231f565b90612ba69161205e565b60200180612bb383612339565b90612bbd9161205e565b60200180612bca83612353565b90612bd49161205e565b602001612be1819261236d565b90612beb9161205e565b6020019260010191602001916128fc565b612c82916003612c2c612c1b60c084015f86018582035f87015261062f565b60018501848203602086015261062f565b92612c73612c696002830154612c4e612c44826109d7565b60408801906101e2565b612c64612c5a826109fe565b60608801906101e2565b610a2b565b6080850190612014565b019060a0818403910152612381565b90565b91612cb190612ca3612cbf959360608601908682035f880152611f88565b908482036020860152611f88565b916040818403910152612bfc565b90565b612cca610092565b3d5f823e3d90fd5b5190565b612ce5612ceb9193929361081c565b9261081c565b91612cf783820261081c565b928184041490151715612d0657565b61161f565b612d16906003612cd6565b90565b1c90565b90612d30905f1990602003600802612d19565b8154169055565b1b90565b91906008612d56910291612d505f1984612d37565b92612d37565b9181191691161790565b90565b9190612d79612d74612d8193611734565b612d60565b908354612d3b565b9055565b5f90565b612d9b91612d95612d85565b91612d63565b565b5b818110612da9575050565b80612db65f600193612d89565b01612d9e565b90612dcc905f1990600802612d19565b191690565b81612ddb91612dbc565b906002021790565b905f91612dfa612df282610626565b928354612dd1565b905555565b601f602091010490565b919290602082105f14612e6257601f8411600114612e3257612e2c929350612dd1565b90555b5b565b5090612e58612e5d936001612e4f612e4985610626565b92612dff565b82019101612d9d565b612de3565b612e2f565b50612e998293612e73600194610626565b612e92612e7f85612dff565b820192601f861680612ea4575b50612dff565b0190612d9d565b600202179055612e30565b612eb090888603612d1d565b5f612e8c565b929091680100000000000000008211612f16576020115f14612f0757602081105f14612eeb57612ee591612dd1565b90555b5b565b60019160ff1916612efb84610626565b55600202019055612ee8565b60019150600202019055612ee9565b6106c8565b908154612f27816105fc565b90818311612f50575b818310612f3e575b50505050565b612f4793612e09565b5f808080612f38565b612f5c83838387612eb6565b612f30565b5f612f6b91612f1b565b565b905f03612f7f57612f7d90612f61565b565b6105d5565b600190818003010490565b5f80910155565b905f03612fa857612fa690612f8f565b565b6105d5565b5b818110612fb9575050565b80612fc65f600193612f96565b01612fae565b9091828110612fdb575b505050565b612ff9612ff3612fed61300495612f84565b92612f84565b92610d2d565b918201910190612fad565b5f8080612fd6565b90680100000000000000008111613035578161302a61303393610cf5565b90828155612fcc565b565b6106c8565b5f6130449161300c565b565b905f03613058576130569061303a565b565b6105d5565b60089060018203010490565b5b818110613075575050565b806130825f600193612d89565b0161306a565b919091828210613098575b505050565b600460086130a86130d09561305d565b6130ba6130b48661305d565b94610e38565b93840193019306025f81116130d8575b50613069565b5f8080613093565b6130e59060018303612d1d565b5f6130ca565b90680100000000000000008111613114578161310961311293610e34565b90828155613088565b565b6106c8565b5f613123916130eb565b565b905f036131375761313590613119565b565b6105d5565b5f60026131629261314f83808301612f6d565b61315c8360018301613046565b01613125565b565b905f03613176576131749061313c565b565b6105d5565b5b818110613187575050565b806131945f600393613164565b0161317c565b90918281106131a9575b505050565b6131c76131c16131bb6131d295612d0b565b92612d0b565b92610ce9565b91820191019061317b565b5f80806131a4565b9068010000000000000000811161320357816131f861320193610cb1565b9082815561319a565b565b6106c8565b5190565b5190565b9190601f8111613220575b505050565b61322c61325193610626565b90602061323884612dff565b83019310613259575b61324a90612dff565b0190612d9d565b5f808061321b565b915061324a81929050613241565b90613271816100c2565b9067ffffffffffffffff8211613331576132958261328f85546105fc565b85613210565b602090601f83116001146132c9579180916132b8935f926132bd575b5050612dd1565b90555b565b90915001515f806132b1565b601f198316916132d885610626565b925f5b818110613319575091600293918560019694106132ff575b505050020190556132bb565b61330f910151601f841690612dbc565b90555f80806132f3565b919360206001819287870151815501950192016132db565b6106c8565b9061334091613267565b565b5190565b5190565b6133549051610128565b90565b5f1b90565b906133776fffffffffffffffffffffffffffffffff91613357565b9181191691161790565b61339561339061339a92610128565b610ba1565b610128565b90565b90565b906133b56133b06133bc92613381565b61339d565b825461335c565b9055565b60801b90565b906133e26fffffffffffffffffffffffffffffffff19916133c0565b9181191691161790565b906134016133fc61340892613381565b61339d565b82546133c6565b9055565b9061343660205f61343c9461342e82820161342884880161334a565b906133a0565b01920161334a565b906133ec565b565b906134489161340c565b565b61346f61346961345984610115565b93613464858561300c565b610122565b91610d2d565b5f915b83831061347f5750505050565b60016020826134976134918495613346565b8661343e565b01920192019190613472565b906134ad9161344a565b565b5190565b6134bd90516101d9565b90565b919060086134de9102916134d863ffffffff84612d37565b92612d37565b9181191691161790565b90565b906134f5816101c6565b9067ffffffffffffffff82116135da5761351b6135219161351684866130eb565b6101d3565b92610e38565b60088204915f5b83811061359157506008830290035f8111613544575b50505050565b925f935f5b81811061355e5750505001555f80808061353e565b909194602061358560019261357a6135758a6134b3565b6134e8565b9085600402906134c0565b96019101919091613549565b5f5f5b600881106135ab5750906001918185015501613528565b959060206135d16001926135c66135c1866134b3565b6134e8565b908a600402906134c0565b92019601613594565b6106c8565b906135e9916134eb565b565b9061362f604060026136359461360e5f82016136085f880161320c565b90613336565b6136276001820161362160208801613342565b906134a3565b0192016134af565b906135df565b565b90613641916135eb565b565b613668613662613652846100af565b9361365d85856131da565b6100bc565b91610ce9565b5f915b8383106136785750505050565b600360208261369161368b600195613208565b86613637565b0192019201919061366b565b906136a791613643565b565b5190565b6136b8906002612cd6565b90565b600190818003010490565b5b8181106136d2575050565b806136df5f600193612f6d565b016136c7565b90918281106136f4575b505050565b61371261370c61370661371d956136bb565b926136bb565b92611280565b9182019101906136c6565b5f80806136ef565b9068010000000000000000811161374e578161374361374c93611248565b908281556136e5565b565b6106c8565b5f61375d91613725565b565b905f036137715761376f90613753565b565b6105d5565b5f600161378f9261378983808301612f6d565b0161375f565b565b905f036137a3576137a190613776565b565b6105d5565b5b8181106137b4575050565b806137c15f600293613791565b016137a9565b90918281106137d6575b505050565b6137f46137ee6137e86137ff956136ad565b926136ad565b9261123f565b9182019101906137a8565b5f80806137d1565b90680100000000000000008111613830578161382561382e93611207565b908281556137c7565b565b6106c8565b5190565b5190565b61386261385c61384c84610329565b936138578585613725565b610336565b91611280565b5f915b8383106138725750505050565b600160208261388a613884849561320c565b86613336565b01920192019190613865565b906138a09161383d565b565b906138cd602060016138d3946138c55f82016138bf5f880161320c565b90613336565b019201613839565b90613896565b565b906138df916138a2565b565b6139066139006138f084610316565b936138fb8585613807565b610323565b9161123f565b5f915b8383106139165750505050565b600260208261392f613929600195613835565b866138d5565b01920192019190613909565b90613945916138e1565b565b5190565b613956906002612cd6565b90565b5f60016139729261396c83808301612f6d565b01612f6d565b565b905f036139865761398490613959565b565b6105d5565b5b818110613997575050565b806139a45f600293613974565b0161398c565b90918281106139b9575b505050565b6139d76139d16139cb6139e29561394b565b9261394b565b926113c2565b91820191019061398b565b5f80806139b4565b90680100000000000000008111613a135781613a08613a119361138a565b908281556139aa565b565b6106c8565b5190565b90613a4760206001613a4d94613a3f5f8201613a395f880161320c565b90613336565b01920161320c565b90613336565b565b90613a5991613a1c565b565b613a80613a7a613a6a84610461565b93613a7585856139ea565b61046e565b916113c2565b5f915b838310613a905750505050565b6002602082613aa9613aa3600195613a18565b86613a4f565b01920192019190613a83565b90613abf91613a5b565b565b613acb905161051f565b90565b90613ada60ff91613357565b9181191691161790565b613aed9061051f565b90565b90565b90613b08613b03613b0f92613ae4565b613af0565b8254613ace565b9055565b90613b7060606003613b7694613b365f8201613b305f8801612cd2565b9061369d565b613b4f60018201613b49602088016136a9565b9061393b565b613b6860028201613b6260408801613947565b90613ab5565b019201613ac1565b90613af3565b565b90613b8291613b13565b565b613b8d9061081c565b5f198114613b9b5760010190565b61161f565b90613bac5f1991613357565b9181191691161790565b90613bcb613bc6613bd292611734565b612d60565b8254613ba0565b9055565b613be090546105fc565b90565b90808214613cc257613bf481613bd6565b9067ffffffffffffffff8211613cbd57613c1882613c1285546105fc565b85613210565b5f90601f8311600114613c4b57918091613c3a935f92613c3f575b5050612dd1565b90555b565b90915001545f80613c33565b90613c5a601f19841692610626565b90613c6485610626565b925f5b818110613ca557509160029391856001969410613c8b575b50505002019055613c3d565b613c9b910154601f841690612dbc565b90555f8080613c7f565b91936001806020928787015481550195019201613c67565b6106c8565b5050565b90613cd091613be3565b565b90808203613cdf575b5050565b613d075f8084613cff82613d0d9701613cf9848801610d50565b906133a0565b019201610d85565b906133ec565b5f80613cdb565b90613d1e91613cd2565b565b818114613d7757613d4c613d46613d3684610cf5565b93613d41858561300c565b610d2d565b91610d2d565b5f915b838310613d5c5750505050565b60018082613d6b829486613d14565b01920192019190613d4f565b5050565b90613d8591613d20565b565b90565b90613d9a905f1990600802612d37565b191690565b90808214613e4557613db081610e34565b9067ffffffffffffffff8211613e4057613dd6613ddc91613dd184866130eb565b610e38565b92610e38565b60088204918354905f5b848110613e2257506008840290035f8111613e03575b5050505050565b6001916004613e13920290613d8a565b93505001555f80808080613dfc565b94916001613e308192613d87565b9301958654938186015501613de6565b6106c8565b5050565b90613e5391613d9f565b565b90808203613e62575b5050565b60028083613e785f613e9296015f860190613cc6565b613e89600182016001860190613d7b565b01910190613e49565b5f80613e5e565b90613ea391613e55565b565b818114613efd57613ed1613ecb613ebb84610cb1565b93613ec685856131da565b610ce9565b91610ce9565b5f915b838310613ee15750505050565b60038082613ef160019486613e99565b01920192019190613ed4565b5050565b90613f0b91613ea5565b565b818114613f6457613f39613f33613f2384611248565b93613f2e8585613725565b611280565b91611280565b5f915b838310613f495750505050565b60018082613f58829486613cc6565b01920192019190613f3c565b5050565b90613f7291613f0d565b565b90808203613f81575b5050565b60018083613f975f613fa096015f860190613cc6565b01910190613f68565b5f80613f7d565b90613fb191613f74565b565b81811461400b57613fdf613fd9613fc984611207565b93613fd48585613807565b61123f565b9161123f565b5f915b838310613fef5750505050565b60028082613fff60019486613fa7565b01920192019190613fe2565b5050565b9061401991613fb3565b565b90808203614028575b5050565b6001808361403e5f61404796015f860190613cc6565b01910190613cc6565b5f80614024565b906140589161401b565b565b8181146140b2576140866140806140708461138a565b9361407b85856139ea565b6113c2565b916113c2565b5f915b8383106140965750505050565b600280826140a66001948661404e565b01920192019190614089565b5050565b906140c09161405a565b565b908082036140cf575b5050565b614112600380846140e85f61411897015f870190613f01565b6140f960018201600187019061400f565b61410a6002820160028701906140b6565b019201611489565b90613af3565b5f806140cb565b90614129916140c2565b565b61413490610bc0565b90565b90602061415e5f61416694015461415961415082610d3c565b5f86019061012e565b610d71565b91019061012e565b565b9061417581604093614137565b0190565b60010190565b9061419c61419661418f84610cf5565b8093610119565b92610d2d565b905f5b8181106141ac5750505090565b9091926141c46141be60019286614168565b94614179565b910191909161419f565b61420e9160026141fe6141ed606084015f86018582035f87015261062f565b60018501848203602086015261417f565b9201906040818403910152610ecb565b90565b9061421b916141ce565b90565b60030190565b9061423861423183610cb1565b80926100b3565b908161424960208302840194610ce9565b925f915b83831061425c57505050505090565b9091929394602061427d614277838560019503875289614211565b9761421e565b930193019193929061424d565b60010190565b906142a461429d83611248565b809261032d565b90816142b560208302840194611280565b925f915b8383106142c857505050505090565b909192939460206142e96142e38385600195038752896106bb565b9761428a565b93019301919392906142b9565b614322916001614312604083015f85018482035f86015261062f565b9201906020818403910152614290565b90565b9061432f916142f6565b90565b60020190565b9061434c61434583611207565b809261031a565b908161435d6020830284019461123f565b925f915b83831061437057505050505090565b9091929394602061439161438b838560019503875289614325565b97614332565b9301930191939290614361565b6143ca9160016143ba604083015f85018482035f86015261062f565b920190602081840391015261062f565b90565b906143d79161439e565b90565b60020190565b906143f46143ed8361138a565b8092610465565b9081614405602083028401946113c2565b925f915b83831061441857505050505090565b909192939460206144396144338385600195038752896143cd565b976143da565b9301930191939290614409565b906144a0906060614498600361449061447f61446e608087015f8a018882035f8a0152614224565b600189018782036020890152614338565b6002880186820360408801526143e0565b950154611475565b910190610524565b90565b6144b89160208201915f818403910152614446565b90565b6144e47f0000000000000000000000000000000000000000000000000000000000000000610bcc565b5f63a192a0f991819061450d836001956145186002614501610092565b98899788968795611893565b855260048501612c85565b03925af180156145d157614535915f916145af575b506006613b78565b6145676006614562600b61455161454c600a611612565b613b84565b61455c81600a613bb6565b90611750565b61411f565b336006906145aa6145987f5a1ed425a160d1bc929890b991acc0e3d25a6f5db1ac65c07ee4c917708f76d49261412b565b926145a1610092565b918291826144a3565b0390a2565b6145cb91503d805f833e6145c381836106dc565b810190611f53565b5f61452d565b612cc256fea26469706673582212205bdf48c709477ad1d504988b5ab70fe01da3ad2825229213f67d3fbd3d03afef64736f6c634300081c0033
opengradient/cli.py CHANGED
@@ -1,3 +1,5 @@
1
+ # type: ignore
2
+
1
3
  import ast
2
4
  import json
3
5
  import logging
@@ -320,21 +322,23 @@ def infer(ctx, model_cid: str, inference_mode: str, input_data, input_file: Path
320
322
  model_input = json.load(file)
321
323
 
322
324
  click.echo(f'Running {inference_mode} inference for model "{model_cid}"')
323
- tx_hash, model_output = client.infer(model_cid=model_cid, inference_mode=InferenceModes[inference_mode], model_input=model_input)
325
+ inference_result = client.infer(model_cid=model_cid, inference_mode=InferenceModes[inference_mode], model_input=model_input)
324
326
 
325
327
  click.echo() # Add a newline for better spacing
326
328
  click.secho("✅ Transaction successful", fg="green", bold=True)
327
329
  click.echo("──────────────────────────────────────")
328
330
  click.echo("Transaction hash: ", nl=False)
329
- click.secho(tx_hash, fg="cyan", bold=True)
331
+ click.secho(inference_result.transaction_hash, fg="cyan", bold=True)
330
332
 
331
- block_explorer_link = f"{DEFAULT_BLOCKCHAIN_EXPLORER}0x{tx_hash}"
333
+ block_explorer_link = f"{DEFAULT_BLOCKCHAIN_EXPLORER}0x{inference_result.transaction_hash}"
332
334
  click.echo("Block explorer link: ", nl=False)
333
335
  click.secho(block_explorer_link, fg="blue", underline=True)
334
336
  click.echo()
335
337
 
336
338
  click.secho("Inference result:", fg="green")
337
- formatted_output = json.dumps(model_output, indent=2, default=lambda x: x.tolist() if hasattr(x, "tolist") else str(x))
339
+ formatted_output = json.dumps(
340
+ inference_result.model_output, indent=2, default=lambda x: x.tolist() if hasattr(x, "tolist") else str(x)
341
+ )
338
342
  click.echo(formatted_output)
339
343
  except json.JSONDecodeError as e:
340
344
  click.echo(f"Error decoding JSON: {e}", err=True)
@@ -375,7 +379,7 @@ def completion(ctx, model_cid: str, inference_mode: str, prompt: str, max_tokens
375
379
  client: Client = ctx.obj["client"]
376
380
  try:
377
381
  click.echo(f'Running LLM completion inference for model "{model_cid}"\n')
378
- tx_hash, llm_output = client.llm_completion(
382
+ completion_output = client.llm_completion(
379
383
  model_cid=model_cid,
380
384
  inference_mode=LlmInferenceModes[inference_mode],
381
385
  prompt=prompt,
@@ -384,7 +388,7 @@ def completion(ctx, model_cid: str, inference_mode: str, prompt: str, max_tokens
384
388
  temperature=temperature,
385
389
  )
386
390
 
387
- print_llm_completion_result(model_cid, tx_hash, llm_output)
391
+ print_llm_completion_result(model_cid, completion_output.transaction_hash, completion_output.completion_output)
388
392
  except Exception as e:
389
393
  click.echo(f"Error running LLM completion: {str(e)}")
390
394
 
@@ -517,7 +521,7 @@ def chat(
517
521
  if not tools and not tools_file:
518
522
  parsed_tools = None
519
523
 
520
- tx_hash, finish_reason, llm_chat_output = client.llm_chat(
524
+ completion_output = client.llm_chat(
521
525
  model_cid=model_cid,
522
526
  inference_mode=LlmInferenceModes[inference_mode],
523
527
  messages=messages,
@@ -528,7 +532,7 @@ def chat(
528
532
  tool_choice=tool_choice,
529
533
  )
530
534
 
531
- print_llm_chat_result(model_cid, tx_hash, finish_reason, llm_chat_output)
535
+ print_llm_chat_result(model_cid, completion_output.transaction_hash, completion_output.finish_reason, completion_output.chat_output)
532
536
  except Exception as e:
533
537
  click.echo(f"Error running LLM chat inference: {str(e)}")
534
538