opengradient 0.3.25__tar.gz → 0.3.28__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. {opengradient-0.3.25/src/opengradient.egg-info → opengradient-0.3.28}/PKG-INFO +5 -92
  2. opengradient-0.3.28/pyproject.toml +67 -0
  3. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/cli.py +0 -8
  4. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/client.py +36 -22
  5. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/types.py +2 -3
  6. {opengradient-0.3.25 → opengradient-0.3.28/src/opengradient.egg-info}/PKG-INFO +5 -92
  7. opengradient-0.3.28/src/opengradient.egg-info/requires.txt +10 -0
  8. opengradient-0.3.25/pyproject.toml +0 -154
  9. opengradient-0.3.25/src/opengradient.egg-info/requires.txt +0 -97
  10. {opengradient-0.3.25 → opengradient-0.3.28}/LICENSE +0 -0
  11. {opengradient-0.3.25 → opengradient-0.3.28}/MANIFEST.in +0 -0
  12. {opengradient-0.3.25 → opengradient-0.3.28}/README.md +0 -0
  13. {opengradient-0.3.25 → opengradient-0.3.28}/setup.cfg +0 -0
  14. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/__init__.py +0 -0
  15. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/abi/ModelExecutorHistorical.abi +0 -0
  16. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/abi/inference.abi +0 -0
  17. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/account.py +0 -0
  18. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/contracts/templates/ModelExecutorHistorical.bin +0 -0
  19. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/defaults.py +0 -0
  20. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/exceptions.py +0 -0
  21. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/llm/__init__.py +0 -0
  22. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/llm/og_langchain.py +0 -0
  23. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/llm/og_openai.py +0 -0
  24. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/mltools/__init__.py +0 -0
  25. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/mltools/model_tool.py +0 -0
  26. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/proto/__init__.py +0 -0
  27. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/proto/infer.proto +0 -0
  28. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/proto/infer_pb2.py +0 -0
  29. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/proto/infer_pb2_grpc.py +0 -0
  30. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient/utils.py +0 -0
  31. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient.egg-info/SOURCES.txt +0 -0
  32. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient.egg-info/dependency_links.txt +0 -0
  33. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient.egg-info/entry_points.txt +0 -0
  34. {opengradient-0.3.25 → opengradient-0.3.28}/src/opengradient.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: opengradient
3
- Version: 0.3.25
3
+ Version: 0.3.28
4
4
  Summary: Python SDK for OpenGradient decentralized model management & inference services
5
5
  Author-email: OpenGradient <oliver@opengradient.ai>
6
6
  License: MIT License
@@ -35,103 +35,16 @@ Classifier: Programming Language :: Python :: 3.12
35
35
  Requires-Python: >=3.10
36
36
  Description-Content-Type: text/markdown
37
37
  License-File: LICENSE
38
- Requires-Dist: aiohappyeyeballs>=2.4.3
39
- Requires-Dist: aiohttp>=3.10.8
40
- Requires-Dist: aiosignal>=1.3.1
41
- Requires-Dist: annotated-types>=0.7.0
42
- Requires-Dist: attrs>=24.2.0
43
- Requires-Dist: bitarray>=2.9.2
44
- Requires-Dist: CacheControl>=0.14.0
45
- Requires-Dist: cachetools>=5.5.0
46
- Requires-Dist: certifi>=2024.8.30
47
- Requires-Dist: cffi>=1.17.1
48
- Requires-Dist: charset-normalizer>=3.3.2
49
- Requires-Dist: ckzg>=2.0.1
50
- Requires-Dist: cleo>=2.1.0
51
- Requires-Dist: click>=8.1.7
52
- Requires-Dist: cramjam>=2.8.4
53
- Requires-Dist: crashtest>=0.4.1
54
- Requires-Dist: cryptography>=43.0.1
55
- Requires-Dist: cytoolz>=0.12.3
56
- Requires-Dist: distlib>=0.3.8
57
- Requires-Dist: dulwich>=0.21.7
58
38
  Requires-Dist: eth-account>=0.13.4
59
- Requires-Dist: eth-hash>=0.7.0
60
- Requires-Dist: eth-keyfile>=0.8.1
61
- Requires-Dist: eth-keys>=0.5.1
62
- Requires-Dist: eth-rlp>=2.1.0
63
- Requires-Dist: eth-typing>=5.0.0
64
- Requires-Dist: eth-utils>=5.0.0
65
- Requires-Dist: eth_abi>=5.1.0
66
- Requires-Dist: fastjsonschema>=2.20.0
67
- Requires-Dist: fastparquet>=2024.5.0
68
- Requires-Dist: filelock>=3.16.1
39
+ Requires-Dist: web3>=7.3.0
40
+ Requires-Dist: click>=8.1.7
69
41
  Requires-Dist: firebase-rest-api>=1.11.0
70
- Requires-Dist: frozenlist>=1.4.1
71
- Requires-Dist: fsspec>=2024.9.0
72
- Requires-Dist: google-api-core>=2.20.0
73
- Requires-Dist: google-auth>=2.35.0
74
- Requires-Dist: google-cloud-core>=2.4.1
75
- Requires-Dist: google-cloud-firestore>=2.19.0
76
- Requires-Dist: google-cloud-storage>=2.18.2
77
- Requires-Dist: google-crc32c>=1.6.0
78
- Requires-Dist: google-resumable-media>=2.7.2
79
- Requires-Dist: googleapis-common-protos>=1.65.0
80
42
  Requires-Dist: grpcio>=1.66.2
81
- Requires-Dist: grpcio-tools>=1.66.2
82
- Requires-Dist: protobuf>=4.24.0
83
- Requires-Dist: hexbytes>=1.2.1
84
- Requires-Dist: idna>=3.10
85
- Requires-Dist: jaraco.classes>=3.4.0
86
- Requires-Dist: jwcrypto>=1.5.6
87
- Requires-Dist: keyring>=24.3.1
43
+ Requires-Dist: numpy>=1.26.4
44
+ Requires-Dist: requests>=2.32.3
88
45
  Requires-Dist: langchain>=0.3.7
89
- Requires-Dist: more-itertools>=10.5.0
90
- Requires-Dist: msgpack>=1.1.0
91
- Requires-Dist: multidict>=6.1.0
92
46
  Requires-Dist: openai>=1.58.1
93
- Requires-Dist: packaging>=24.1
94
- Requires-Dist: pandas>=2.2.3
95
- Requires-Dist: parsimonious>=0.10.0
96
- Requires-Dist: pathlib>=1.0.1
97
- Requires-Dist: pexpect>=4.9.0
98
- Requires-Dist: pkce>=1.0.3
99
- Requires-Dist: pkginfo>=1.11.1
100
- Requires-Dist: platformdirs>=4.3.6
101
- Requires-Dist: proto-plus>=1.24.0
102
- Requires-Dist: protobuf>=5.28.2
103
- Requires-Dist: ptyprocess>=0.7.0
104
- Requires-Dist: pyarrow>=17.0.0
105
- Requires-Dist: pyasn1>=0.6.1
106
- Requires-Dist: pyasn1_modules>=0.4.1
107
- Requires-Dist: pycparser>=2.22
108
- Requires-Dist: pycryptodome>=3.21.0
109
47
  Requires-Dist: pydantic>=2.9.2
110
- Requires-Dist: pydantic_core>=2.23.4
111
- Requires-Dist: pyproject_hooks>=1.2.0
112
- Requires-Dist: python-dateutil>=2.9.0.post0
113
- Requires-Dist: python-jwt>=4.1.0
114
- Requires-Dist: pytz>=2024.2
115
- Requires-Dist: pyunormalize>=16.0.0
116
- Requires-Dist: RapidFuzz>=3.10.0
117
- Requires-Dist: regex>=2024.9.11
118
- Requires-Dist: requests>=2.32.3
119
- Requires-Dist: requests-toolbelt>=1.0.0
120
- Requires-Dist: rlp>=4.0.1
121
- Requires-Dist: rsa>=4.9
122
- Requires-Dist: shellingham>=1.5.4
123
- Requires-Dist: six>=1.16.0
124
- Requires-Dist: tomlkit>=0.13.2
125
- Requires-Dist: toolz>=0.12.1
126
- Requires-Dist: trove-classifiers>=2024.9.12
127
- Requires-Dist: types-requests>=2.32.0.20240914
128
- Requires-Dist: typing_extensions>=4.12.2
129
- Requires-Dist: tzdata>=2024.2
130
- Requires-Dist: urllib3>=2.2.3
131
- Requires-Dist: web3>=7.3.0
132
- Requires-Dist: websockets>=13.1
133
- Requires-Dist: xattr>=1.1.0
134
- Requires-Dist: yarl>=1.13.1
135
48
 
136
49
  # OpenGradient Python SDK
137
50
  Python SDK for the OpenGradient platform provides decentralized model management & inference services. Python SDK allows programmatic access to our model repository and decentralized AI infrastructure.
@@ -0,0 +1,67 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "opengradient"
7
+ version = "0.3.28"
8
+ description = "Python SDK for OpenGradient decentralized model management & inference services"
9
+ authors = [{name = "OpenGradient", email = "oliver@opengradient.ai"}]
10
+ license = {file = "LICENSE"}
11
+ readme = "README.md"
12
+ requires-python = ">=3.10"
13
+ classifiers = [
14
+ "Development Status :: 3 - Alpha",
15
+ "Intended Audience :: Developers",
16
+ "License :: OSI Approved :: MIT License",
17
+ "Programming Language :: Python :: 3.10",
18
+ "Programming Language :: Python :: 3.11",
19
+ "Programming Language :: Python :: 3.12",
20
+ ]
21
+
22
+ dependencies = [
23
+ "eth-account>=0.13.4",
24
+ "web3>=7.3.0",
25
+ "click>=8.1.7",
26
+ "firebase-rest-api>=1.11.0",
27
+ "grpcio>=1.66.2",
28
+ "numpy>=1.26.4",
29
+ "requests>=2.32.3",
30
+ "langchain>=0.3.7",
31
+ "openai>=1.58.1",
32
+ "pydantic>=2.9.2",
33
+ ]
34
+
35
+ [project.scripts]
36
+ opengradient = "opengradient.cli:cli"
37
+
38
+ [project.urls]
39
+ Homepage = "https://opengradient.ai"
40
+
41
+ [tool.setuptools.exclude-package-data]
42
+ "*" = ["*.ipynb", "*.pyc", "*.pyo", ".gitignore", "requirements.txt", "conftest.py"]
43
+
44
+ [tool.setuptools]
45
+ package-dir = {"" = "src"}
46
+ include-package-data = true
47
+
48
+ [tool.setuptools.packages.find]
49
+ where = ["src"]
50
+ include = ["opengradient*"] # Explicitly include all opengradient packages
51
+ exclude = ["tests*", "stresstest*"]
52
+
53
+ [tool.setuptools.package-data]
54
+ "opengradient" = [
55
+ "abi/*.abi",
56
+ "proto/*.proto",
57
+ "**/*.py"
58
+ ]
59
+
60
+ [tool.ruff]
61
+ line-length = 140
62
+ target-version = "py310"
63
+ select = ["E", "F", "I", "N"]
64
+ ignore = []
65
+
66
+ [tool.ruff.mccabe]
67
+ max-complexity = 10
@@ -69,14 +69,6 @@ LlmInferenceModes = {
69
69
  "TEE": LlmInferenceMode.TEE,
70
70
  }
71
71
 
72
- # Supported LLMs
73
- LlmModels = {
74
- "meta-llama/Meta-Llama-3-8B-Instruct",
75
- "meta-llama/Llama-3.2-3B-Instruct",
76
- "mistralai/Mistral-7B-Instruct-v0.3",
77
- "meta-llama/Llama-3.1-70B-Instruct",
78
- }
79
-
80
72
 
81
73
  def initialize_config(ctx):
82
74
  """Interactively initialize OpenGradient config"""
@@ -30,6 +30,15 @@ _FIREBASE_CONFIG = {
30
30
  "databaseURL": "",
31
31
  }
32
32
 
33
+ # How much time we wait for txn to be included in chain
34
+ LLM_TX_TIMEOUT = 60
35
+ INFERENCE_TX_TIMEOUT = 60
36
+ REGULAR_TX_TIMEOUT = 30
37
+
38
+ # How many times we retry a transaction because of nonce conflict
39
+ DEFAULT_MAX_RETRY = 5
40
+ DEFAULT_RETRY_DELAY_SEC = 1
41
+
33
42
 
34
43
  class Client:
35
44
  _inference_hub_contract_address: str
@@ -317,7 +326,7 @@ class Client:
317
326
 
318
327
  signed_tx = self._wallet_account.sign_transaction(transaction)
319
328
  tx_hash = self._blockchain.eth.send_raw_transaction(signed_tx.raw_transaction)
320
- tx_receipt = self._blockchain.eth.wait_for_transaction_receipt(tx_hash)
329
+ tx_receipt = self._blockchain.eth.wait_for_transaction_receipt(tx_hash, timeout=INFERENCE_TX_TIMEOUT)
321
330
 
322
331
  if tx_receipt["status"] == 0:
323
332
  raise ContractLogicError(f"Transaction failed. Receipt: {tx_receipt}")
@@ -329,7 +338,7 @@ class Client:
329
338
  model_output = utils.convert_to_model_output(parsed_logs[0]["args"])
330
339
  return tx_hash.hex(), model_output
331
340
 
332
- return run_with_retry(execute_transaction, max_retries or 5)
341
+ return run_with_retry(execute_transaction, max_retries)
333
342
 
334
343
  def llm_completion(
335
344
  self,
@@ -384,7 +393,8 @@ class Client:
384
393
 
385
394
  nonce = self._blockchain.eth.get_transaction_count(self._wallet_account.address, "pending")
386
395
  estimated_gas = run_function.estimate_gas({"from": self._wallet_account.address})
387
- gas_limit = int(estimated_gas * 1.2)
396
+ # Artificially increase required gas for safety
397
+ gas_limit = int(estimated_gas * 1.5)
388
398
 
389
399
  transaction = run_function.build_transaction(
390
400
  {
@@ -397,7 +407,7 @@ class Client:
397
407
 
398
408
  signed_tx = self._wallet_account.sign_transaction(transaction)
399
409
  tx_hash = self._blockchain.eth.send_raw_transaction(signed_tx.raw_transaction)
400
- tx_receipt = self._blockchain.eth.wait_for_transaction_receipt(tx_hash)
410
+ tx_receipt = self._blockchain.eth.wait_for_transaction_receipt(tx_hash, timeout=LLM_TX_TIMEOUT)
401
411
 
402
412
  if tx_receipt["status"] == 0:
403
413
  raise ContractLogicError(f"Transaction failed. Receipt: {tx_receipt}")
@@ -409,7 +419,7 @@ class Client:
409
419
  llm_answer = parsed_logs[0]["args"]["response"]["answer"]
410
420
  return tx_hash.hex(), llm_answer
411
421
 
412
- return run_with_retry(execute_transaction, max_retries or 5)
422
+ return run_with_retry(execute_transaction, max_retries)
413
423
 
414
424
  def llm_chat(
415
425
  self,
@@ -531,7 +541,8 @@ class Client:
531
541
 
532
542
  nonce = self._blockchain.eth.get_transaction_count(self._wallet_account.address, "pending")
533
543
  estimated_gas = run_function.estimate_gas({"from": self._wallet_account.address})
534
- gas_limit = int(estimated_gas * 1.2)
544
+ # Artificially increase required gas for safety
545
+ gas_limit = int(estimated_gas * 1.5)
535
546
 
536
547
  transaction = run_function.build_transaction(
537
548
  {
@@ -544,7 +555,7 @@ class Client:
544
555
 
545
556
  signed_tx = self._wallet_account.sign_transaction(transaction)
546
557
  tx_hash = self._blockchain.eth.send_raw_transaction(signed_tx.raw_transaction)
547
- tx_receipt = self._blockchain.eth.wait_for_transaction_receipt(tx_hash)
558
+ tx_receipt = self._blockchain.eth.wait_for_transaction_receipt(tx_hash, timeout=LLM_TX_TIMEOUT)
548
559
 
549
560
  if tx_receipt["status"] == 0:
550
561
  raise ContractLogicError(f"Transaction failed. Receipt: {tx_receipt}")
@@ -560,7 +571,7 @@ class Client:
560
571
 
561
572
  return tx_hash.hex(), llm_result["finish_reason"], message
562
573
 
563
- return run_with_retry(execute_transaction, max_retries or 5)
574
+ return run_with_retry(execute_transaction, max_retries)
564
575
 
565
576
  def list_files(self, model_name: str, version: str) -> List[Dict]:
566
577
  """
@@ -775,7 +786,7 @@ class Client:
775
786
 
776
787
  signed_txn = self._wallet_account.sign_transaction(transaction)
777
788
  tx_hash = self._blockchain.eth.send_raw_transaction(signed_txn.raw_transaction)
778
- tx_receipt = self._blockchain.eth.wait_for_transaction_receipt(tx_hash)
789
+ tx_receipt = self._blockchain.eth.wait_for_transaction_receipt(tx_hash, timeout=REGULAR_TX_TIMEOUT)
779
790
  contract_address = tx_receipt.contractAddress
780
791
 
781
792
  print(f"✅ Workflow contract deployed at: {contract_address}")
@@ -820,7 +831,7 @@ class Client:
820
831
 
821
832
  signed_scheduler_tx = self._wallet_account.sign_transaction(scheduler_tx)
822
833
  scheduler_tx_hash = self._blockchain.eth.send_raw_transaction(signed_scheduler_tx.raw_transaction)
823
- self._blockchain.eth.wait_for_transaction_receipt(scheduler_tx_hash)
834
+ self._blockchain.eth.wait_for_transaction_receipt(scheduler_tx_hash, timeout=REGULAR_TX_TIMEOUT)
824
835
 
825
836
  print("✅ Automated execution schedule set successfully!")
826
837
  print(f" Transaction hash: {scheduler_tx_hash.hex()}")
@@ -886,7 +897,7 @@ class Client:
886
897
 
887
898
  signed_txn = self._wallet_account.sign_transaction(transaction)
888
899
  tx_hash = self._blockchain.eth.send_raw_transaction(signed_txn.raw_transaction)
889
- tx_receipt = self._blockchain.eth.wait_for_transaction_receipt(tx_hash)
900
+ tx_receipt = self._blockchain.eth.wait_for_transaction_receipt(tx_hash, timeout=INFERENCE_TX_TIMEOUT)
890
901
 
891
902
  if tx_receipt.status == 0:
892
903
  raise ContractLogicError(f"Run transaction failed. Receipt: {tx_receipt}")
@@ -896,25 +907,28 @@ class Client:
896
907
  return result
897
908
 
898
909
 
899
- def run_with_retry(txn_function, max_retries=5):
910
+ def run_with_retry(txn_function, max_retries=DEFAULT_MAX_RETRY, retry_delay=DEFAULT_RETRY_DELAY_SEC):
900
911
  """
901
912
  Execute a blockchain transaction with retry logic.
902
913
 
903
914
  Args:
904
915
  txn_function: Function that executes the transaction
905
916
  max_retries (int): Maximum number of retry attempts
917
+ retry_delay (float): Delay in seconds between retries for nonce issues
906
918
  """
907
- last_error = None
919
+ NONCE_TOO_LOW = 'nonce too low'
920
+ NONCE_TOO_HIGH = 'nonce too high'
921
+
908
922
  for attempt in range(max_retries):
909
923
  try:
910
924
  return txn_function()
911
925
  except Exception as e:
912
- last_error = e
913
- if attempt < max_retries - 1:
914
- if "nonce too low" in str(e) or "nonce too high" in str(e):
915
- time.sleep(1) # Wait before retry
916
- continue
917
- # If it's not a nonce error, raise immediately
918
- raise
919
- # If we've exhausted all retries, raise the last error
920
- raise OpenGradientError(f"Transaction failed after {max_retries} attempts: {str(last_error)}")
926
+ error_msg = str(e).lower()
927
+
928
+ if NONCE_TOO_LOW in error_msg or NONCE_TOO_HIGH in error_msg:
929
+ if attempt == max_retries - 1:
930
+ raise OpenGradientError(f"Transaction failed after {max_retries} attempts: {e}")
931
+ time.sleep(retry_delay)
932
+ continue
933
+
934
+ raise
@@ -128,17 +128,16 @@ class Abi:
128
128
 
129
129
  class LLM(str, Enum):
130
130
  """Enum for available LLM models"""
131
-
132
131
  META_LLAMA_3_8B_INSTRUCT = "meta-llama/Meta-Llama-3-8B-Instruct"
133
132
  LLAMA_3_2_3B_INSTRUCT = "meta-llama/Llama-3.2-3B-Instruct"
134
133
  MISTRAL_7B_INSTRUCT_V3 = "mistralai/Mistral-7B-Instruct-v0.3"
135
- HERMES_3_LLAMA_3_1_70B = "NousResearch/Hermes-3-Llama-3.1-70B"
134
+ QWEN_2_5_72B_INSTRUCT = "Qwen/Qwen2.5-72B-Instruct"
136
135
  META_LLAMA_3_1_70B_INSTRUCT = "meta-llama/Llama-3.1-70B-Instruct"
137
136
 
138
137
 
139
138
  class TEE_LLM(str, Enum):
140
139
  """Enum for LLM models available for TEE execution"""
141
-
140
+ QWEN_2_5_72B_INSTRUCT = "Qwen/Qwen2.5-72B-Instruct"
142
141
  META_LLAMA_3_1_70B_INSTRUCT = "meta-llama/Llama-3.1-70B-Instruct"
143
142
 
144
143
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: opengradient
3
- Version: 0.3.25
3
+ Version: 0.3.28
4
4
  Summary: Python SDK for OpenGradient decentralized model management & inference services
5
5
  Author-email: OpenGradient <oliver@opengradient.ai>
6
6
  License: MIT License
@@ -35,103 +35,16 @@ Classifier: Programming Language :: Python :: 3.12
35
35
  Requires-Python: >=3.10
36
36
  Description-Content-Type: text/markdown
37
37
  License-File: LICENSE
38
- Requires-Dist: aiohappyeyeballs>=2.4.3
39
- Requires-Dist: aiohttp>=3.10.8
40
- Requires-Dist: aiosignal>=1.3.1
41
- Requires-Dist: annotated-types>=0.7.0
42
- Requires-Dist: attrs>=24.2.0
43
- Requires-Dist: bitarray>=2.9.2
44
- Requires-Dist: CacheControl>=0.14.0
45
- Requires-Dist: cachetools>=5.5.0
46
- Requires-Dist: certifi>=2024.8.30
47
- Requires-Dist: cffi>=1.17.1
48
- Requires-Dist: charset-normalizer>=3.3.2
49
- Requires-Dist: ckzg>=2.0.1
50
- Requires-Dist: cleo>=2.1.0
51
- Requires-Dist: click>=8.1.7
52
- Requires-Dist: cramjam>=2.8.4
53
- Requires-Dist: crashtest>=0.4.1
54
- Requires-Dist: cryptography>=43.0.1
55
- Requires-Dist: cytoolz>=0.12.3
56
- Requires-Dist: distlib>=0.3.8
57
- Requires-Dist: dulwich>=0.21.7
58
38
  Requires-Dist: eth-account>=0.13.4
59
- Requires-Dist: eth-hash>=0.7.0
60
- Requires-Dist: eth-keyfile>=0.8.1
61
- Requires-Dist: eth-keys>=0.5.1
62
- Requires-Dist: eth-rlp>=2.1.0
63
- Requires-Dist: eth-typing>=5.0.0
64
- Requires-Dist: eth-utils>=5.0.0
65
- Requires-Dist: eth_abi>=5.1.0
66
- Requires-Dist: fastjsonschema>=2.20.0
67
- Requires-Dist: fastparquet>=2024.5.0
68
- Requires-Dist: filelock>=3.16.1
39
+ Requires-Dist: web3>=7.3.0
40
+ Requires-Dist: click>=8.1.7
69
41
  Requires-Dist: firebase-rest-api>=1.11.0
70
- Requires-Dist: frozenlist>=1.4.1
71
- Requires-Dist: fsspec>=2024.9.0
72
- Requires-Dist: google-api-core>=2.20.0
73
- Requires-Dist: google-auth>=2.35.0
74
- Requires-Dist: google-cloud-core>=2.4.1
75
- Requires-Dist: google-cloud-firestore>=2.19.0
76
- Requires-Dist: google-cloud-storage>=2.18.2
77
- Requires-Dist: google-crc32c>=1.6.0
78
- Requires-Dist: google-resumable-media>=2.7.2
79
- Requires-Dist: googleapis-common-protos>=1.65.0
80
42
  Requires-Dist: grpcio>=1.66.2
81
- Requires-Dist: grpcio-tools>=1.66.2
82
- Requires-Dist: protobuf>=4.24.0
83
- Requires-Dist: hexbytes>=1.2.1
84
- Requires-Dist: idna>=3.10
85
- Requires-Dist: jaraco.classes>=3.4.0
86
- Requires-Dist: jwcrypto>=1.5.6
87
- Requires-Dist: keyring>=24.3.1
43
+ Requires-Dist: numpy>=1.26.4
44
+ Requires-Dist: requests>=2.32.3
88
45
  Requires-Dist: langchain>=0.3.7
89
- Requires-Dist: more-itertools>=10.5.0
90
- Requires-Dist: msgpack>=1.1.0
91
- Requires-Dist: multidict>=6.1.0
92
46
  Requires-Dist: openai>=1.58.1
93
- Requires-Dist: packaging>=24.1
94
- Requires-Dist: pandas>=2.2.3
95
- Requires-Dist: parsimonious>=0.10.0
96
- Requires-Dist: pathlib>=1.0.1
97
- Requires-Dist: pexpect>=4.9.0
98
- Requires-Dist: pkce>=1.0.3
99
- Requires-Dist: pkginfo>=1.11.1
100
- Requires-Dist: platformdirs>=4.3.6
101
- Requires-Dist: proto-plus>=1.24.0
102
- Requires-Dist: protobuf>=5.28.2
103
- Requires-Dist: ptyprocess>=0.7.0
104
- Requires-Dist: pyarrow>=17.0.0
105
- Requires-Dist: pyasn1>=0.6.1
106
- Requires-Dist: pyasn1_modules>=0.4.1
107
- Requires-Dist: pycparser>=2.22
108
- Requires-Dist: pycryptodome>=3.21.0
109
47
  Requires-Dist: pydantic>=2.9.2
110
- Requires-Dist: pydantic_core>=2.23.4
111
- Requires-Dist: pyproject_hooks>=1.2.0
112
- Requires-Dist: python-dateutil>=2.9.0.post0
113
- Requires-Dist: python-jwt>=4.1.0
114
- Requires-Dist: pytz>=2024.2
115
- Requires-Dist: pyunormalize>=16.0.0
116
- Requires-Dist: RapidFuzz>=3.10.0
117
- Requires-Dist: regex>=2024.9.11
118
- Requires-Dist: requests>=2.32.3
119
- Requires-Dist: requests-toolbelt>=1.0.0
120
- Requires-Dist: rlp>=4.0.1
121
- Requires-Dist: rsa>=4.9
122
- Requires-Dist: shellingham>=1.5.4
123
- Requires-Dist: six>=1.16.0
124
- Requires-Dist: tomlkit>=0.13.2
125
- Requires-Dist: toolz>=0.12.1
126
- Requires-Dist: trove-classifiers>=2024.9.12
127
- Requires-Dist: types-requests>=2.32.0.20240914
128
- Requires-Dist: typing_extensions>=4.12.2
129
- Requires-Dist: tzdata>=2024.2
130
- Requires-Dist: urllib3>=2.2.3
131
- Requires-Dist: web3>=7.3.0
132
- Requires-Dist: websockets>=13.1
133
- Requires-Dist: xattr>=1.1.0
134
- Requires-Dist: yarl>=1.13.1
135
48
 
136
49
  # OpenGradient Python SDK
137
50
  Python SDK for the OpenGradient platform provides decentralized model management & inference services. Python SDK allows programmatic access to our model repository and decentralized AI infrastructure.
@@ -0,0 +1,10 @@
1
+ eth-account>=0.13.4
2
+ web3>=7.3.0
3
+ click>=8.1.7
4
+ firebase-rest-api>=1.11.0
5
+ grpcio>=1.66.2
6
+ numpy>=1.26.4
7
+ requests>=2.32.3
8
+ langchain>=0.3.7
9
+ openai>=1.58.1
10
+ pydantic>=2.9.2
@@ -1,154 +0,0 @@
1
- [build-system]
2
- requires = ["setuptools>=61.0"]
3
- build-backend = "setuptools.build_meta"
4
-
5
- [project]
6
- name = "opengradient"
7
- version = "0.3.25"
8
- description = "Python SDK for OpenGradient decentralized model management & inference services"
9
- authors = [{name = "OpenGradient", email = "oliver@opengradient.ai"}]
10
- license = {file = "LICENSE"}
11
- readme = "README.md"
12
- requires-python = ">=3.10"
13
- classifiers = [
14
- "Development Status :: 3 - Alpha",
15
- "Intended Audience :: Developers",
16
- "License :: OSI Approved :: MIT License",
17
- "Programming Language :: Python :: 3.10",
18
- "Programming Language :: Python :: 3.11",
19
- "Programming Language :: Python :: 3.12",
20
- ]
21
- # Dependencies kept as is...
22
- dependencies = [
23
- "aiohappyeyeballs>=2.4.3",
24
- "aiohttp>=3.10.8",
25
- "aiosignal>=1.3.1",
26
- "annotated-types>=0.7.0",
27
- "attrs>=24.2.0",
28
- "bitarray>=2.9.2",
29
- "CacheControl>=0.14.0",
30
- "cachetools>=5.5.0",
31
- "certifi>=2024.8.30",
32
- "cffi>=1.17.1",
33
- "charset-normalizer>=3.3.2",
34
- "ckzg>=2.0.1",
35
- "cleo>=2.1.0",
36
- "click>=8.1.7",
37
- "cramjam>=2.8.4",
38
- "crashtest>=0.4.1",
39
- "cryptography>=43.0.1",
40
- "cytoolz>=0.12.3",
41
- "distlib>=0.3.8",
42
- "dulwich>=0.21.7",
43
- "eth-account>=0.13.4",
44
- "eth-hash>=0.7.0",
45
- "eth-keyfile>=0.8.1",
46
- "eth-keys>=0.5.1",
47
- "eth-rlp>=2.1.0",
48
- "eth-typing>=5.0.0",
49
- "eth-utils>=5.0.0",
50
- "eth_abi>=5.1.0",
51
- "fastjsonschema>=2.20.0",
52
- "fastparquet>=2024.5.0",
53
- "filelock>=3.16.1",
54
- "firebase-rest-api>=1.11.0",
55
- "frozenlist>=1.4.1",
56
- "fsspec>=2024.9.0",
57
- "google-api-core>=2.20.0",
58
- "google-auth>=2.35.0",
59
- "google-cloud-core>=2.4.1",
60
- "google-cloud-firestore>=2.19.0",
61
- "google-cloud-storage>=2.18.2",
62
- "google-crc32c>=1.6.0",
63
- "google-resumable-media>=2.7.2",
64
- "googleapis-common-protos>=1.65.0",
65
- "grpcio>=1.66.2",
66
- "grpcio-tools>=1.66.2",
67
- "protobuf>=4.24.0",
68
- "hexbytes>=1.2.1",
69
- "idna>=3.10",
70
- "jaraco.classes>=3.4.0",
71
- "jwcrypto>=1.5.6",
72
- "keyring>=24.3.1",
73
- "langchain>=0.3.7",
74
- "more-itertools>=10.5.0",
75
- "msgpack>=1.1.0",
76
- "multidict>=6.1.0",
77
- "openai>=1.58.1",
78
- "packaging>=24.1",
79
- "pandas>=2.2.3",
80
- "parsimonious>=0.10.0",
81
- "pathlib>=1.0.1",
82
- "pexpect>=4.9.0",
83
- "pkce>=1.0.3",
84
- "pkginfo>=1.11.1",
85
- "platformdirs>=4.3.6",
86
- "proto-plus>=1.24.0",
87
- "protobuf>=5.28.2",
88
- "ptyprocess>=0.7.0",
89
- "pyarrow>=17.0.0",
90
- "pyasn1>=0.6.1",
91
- "pyasn1_modules>=0.4.1",
92
- "pycparser>=2.22",
93
- "pycryptodome>=3.21.0",
94
- "pydantic>=2.9.2",
95
- "pydantic_core>=2.23.4",
96
- "pyproject_hooks>=1.2.0",
97
- "python-dateutil>=2.9.0.post0",
98
- "python-jwt>=4.1.0",
99
- "pytz>=2024.2",
100
- "pyunormalize>=16.0.0",
101
- "RapidFuzz>=3.10.0",
102
- "regex>=2024.9.11",
103
- "requests>=2.32.3",
104
- "requests-toolbelt>=1.0.0",
105
- "rlp>=4.0.1",
106
- "rsa>=4.9",
107
- "shellingham>=1.5.4",
108
- "six>=1.16.0",
109
- "tomlkit>=0.13.2",
110
- "toolz>=0.12.1",
111
- "trove-classifiers>=2024.9.12",
112
- "types-requests>=2.32.0.20240914",
113
- "typing_extensions>=4.12.2",
114
- "tzdata>=2024.2",
115
- "urllib3>=2.2.3",
116
- "web3>=7.3.0",
117
- "websockets>=13.1",
118
- "xattr>=1.1.0",
119
- "yarl>=1.13.1",
120
- ]
121
-
122
- [project.scripts]
123
- opengradient = "opengradient.cli:cli"
124
-
125
- [project.urls]
126
- Homepage = "https://opengradient.ai"
127
-
128
- [tool.setuptools.exclude-package-data]
129
- "*" = ["*.ipynb", "*.pyc", "*.pyo", ".gitignore", "requirements.txt", "conftest.py"]
130
-
131
- [tool.setuptools]
132
- package-dir = {"" = "src"}
133
- include-package-data = true
134
-
135
- [tool.setuptools.packages.find]
136
- where = ["src"]
137
- include = ["opengradient*"] # Explicitly include all opengradient packages
138
- exclude = ["tests*", "stresstest*"]
139
-
140
- [tool.setuptools.package-data]
141
- "opengradient" = [
142
- "abi/*.abi",
143
- "proto/*.proto",
144
- "**/*.py"
145
- ]
146
-
147
- [tool.ruff]
148
- line-length = 140
149
- target-version = "py310"
150
- select = ["E", "F", "I", "N"]
151
- ignore = []
152
-
153
- [tool.ruff.mccabe]
154
- max-complexity = 10
@@ -1,97 +0,0 @@
1
- aiohappyeyeballs>=2.4.3
2
- aiohttp>=3.10.8
3
- aiosignal>=1.3.1
4
- annotated-types>=0.7.0
5
- attrs>=24.2.0
6
- bitarray>=2.9.2
7
- CacheControl>=0.14.0
8
- cachetools>=5.5.0
9
- certifi>=2024.8.30
10
- cffi>=1.17.1
11
- charset-normalizer>=3.3.2
12
- ckzg>=2.0.1
13
- cleo>=2.1.0
14
- click>=8.1.7
15
- cramjam>=2.8.4
16
- crashtest>=0.4.1
17
- cryptography>=43.0.1
18
- cytoolz>=0.12.3
19
- distlib>=0.3.8
20
- dulwich>=0.21.7
21
- eth-account>=0.13.4
22
- eth-hash>=0.7.0
23
- eth-keyfile>=0.8.1
24
- eth-keys>=0.5.1
25
- eth-rlp>=2.1.0
26
- eth-typing>=5.0.0
27
- eth-utils>=5.0.0
28
- eth_abi>=5.1.0
29
- fastjsonschema>=2.20.0
30
- fastparquet>=2024.5.0
31
- filelock>=3.16.1
32
- firebase-rest-api>=1.11.0
33
- frozenlist>=1.4.1
34
- fsspec>=2024.9.0
35
- google-api-core>=2.20.0
36
- google-auth>=2.35.0
37
- google-cloud-core>=2.4.1
38
- google-cloud-firestore>=2.19.0
39
- google-cloud-storage>=2.18.2
40
- google-crc32c>=1.6.0
41
- google-resumable-media>=2.7.2
42
- googleapis-common-protos>=1.65.0
43
- grpcio>=1.66.2
44
- grpcio-tools>=1.66.2
45
- protobuf>=4.24.0
46
- hexbytes>=1.2.1
47
- idna>=3.10
48
- jaraco.classes>=3.4.0
49
- jwcrypto>=1.5.6
50
- keyring>=24.3.1
51
- langchain>=0.3.7
52
- more-itertools>=10.5.0
53
- msgpack>=1.1.0
54
- multidict>=6.1.0
55
- openai>=1.58.1
56
- packaging>=24.1
57
- pandas>=2.2.3
58
- parsimonious>=0.10.0
59
- pathlib>=1.0.1
60
- pexpect>=4.9.0
61
- pkce>=1.0.3
62
- pkginfo>=1.11.1
63
- platformdirs>=4.3.6
64
- proto-plus>=1.24.0
65
- protobuf>=5.28.2
66
- ptyprocess>=0.7.0
67
- pyarrow>=17.0.0
68
- pyasn1>=0.6.1
69
- pyasn1_modules>=0.4.1
70
- pycparser>=2.22
71
- pycryptodome>=3.21.0
72
- pydantic>=2.9.2
73
- pydantic_core>=2.23.4
74
- pyproject_hooks>=1.2.0
75
- python-dateutil>=2.9.0.post0
76
- python-jwt>=4.1.0
77
- pytz>=2024.2
78
- pyunormalize>=16.0.0
79
- RapidFuzz>=3.10.0
80
- regex>=2024.9.11
81
- requests>=2.32.3
82
- requests-toolbelt>=1.0.0
83
- rlp>=4.0.1
84
- rsa>=4.9
85
- shellingham>=1.5.4
86
- six>=1.16.0
87
- tomlkit>=0.13.2
88
- toolz>=0.12.1
89
- trove-classifiers>=2024.9.12
90
- types-requests>=2.32.0.20240914
91
- typing_extensions>=4.12.2
92
- tzdata>=2024.2
93
- urllib3>=2.2.3
94
- web3>=7.3.0
95
- websockets>=13.1
96
- xattr>=1.1.0
97
- yarl>=1.13.1
File without changes
File without changes
File without changes
File without changes