agent0-sdk 1.5.0b1__py3-none-any.whl → 1.5.1b1__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.
agent0_sdk/core/models.py CHANGED
@@ -165,11 +165,6 @@ class AgentSummary:
165
165
  description: str
166
166
  owners: List[Address]
167
167
  operators: List[Address]
168
- # Endpoint strings (new unified search + Jan 2026 schema)
169
- mcp: Optional[str] = None
170
- a2a: Optional[str] = None
171
- web: Optional[str] = None
172
- email: Optional[str] = None
173
168
  ens: Optional[str]
174
169
  did: Optional[str]
175
170
  walletAddress: Optional[Address]
@@ -178,9 +173,14 @@ class AgentSummary:
178
173
  mcpTools: List[str]
179
174
  mcpPrompts: List[str]
180
175
  mcpResources: List[str]
176
+ active: bool
177
+ # Endpoint strings (new unified search + Jan 2026 schema)
178
+ mcp: Optional[str] = None
179
+ a2a: Optional[str] = None
180
+ web: Optional[str] = None
181
+ email: Optional[str] = None
181
182
  oasfSkills: List[str] = field(default_factory=list)
182
183
  oasfDomains: List[str] = field(default_factory=list)
183
- active: bool
184
184
  x402support: bool = False
185
185
  createdAt: Optional[int] = None
186
186
  updatedAt: Optional[int] = None
@@ -358,8 +358,6 @@ class SearchFilters:
358
358
  @dataclass
359
359
  class SearchOptions:
360
360
  sort: Optional[List[str]] = None
361
- pageSize: Optional[int] = None
362
- cursor: Optional[str] = None
363
361
  semanticMinScore: Optional[float] = None
364
362
  semanticTopK: Optional[int] = None
365
363
 
agent0_sdk/core/sdk.py CHANGED
@@ -463,7 +463,7 @@ class SDK:
463
463
  filters: Union[SearchFilters, Dict[str, Any], None] = None,
464
464
  options: Union[SearchOptions, Dict[str, Any], None] = None,
465
465
  **kwargs # Accept search criteria as kwargs for better DX
466
- ) -> Dict[str, Any]:
466
+ ) -> List[AgentSummary]:
467
467
  """Search for agents.
468
468
 
469
469
  Examples:
@@ -473,9 +473,6 @@ class SDK:
473
473
 
474
474
  # Explicit SearchParams (for complex queries or IDE autocomplete)
475
475
  sdk.searchAgents(SearchParams(name="Test", mcpTools=["code_generation"]))
476
-
477
- # With pagination
478
- sdk.searchAgents(name="Test", page_size=10)
479
476
  """
480
477
  # Allow kwargs to populate filters for better DX.
481
478
  if kwargs and filters is None:
@@ -488,19 +485,17 @@ class SDK:
488
485
  if isinstance(filters.get("feedback"), dict):
489
486
  filters["feedback"] = FeedbackFilters(**filters["feedback"])
490
487
  filters = SearchFilters(**filters)
491
-
488
+
492
489
  if options is None:
493
490
  options = SearchOptions()
494
491
  elif isinstance(options, dict):
495
492
  options = SearchOptions(**options)
496
493
 
497
- if options.sort is None:
498
- options.sort = ["updatedAt:desc"]
499
-
500
- if options.pageSize is None:
501
- options.pageSize = 50
502
-
503
- return self.indexer.search_agents(filters, options)
494
+ # Do not force a default sort here; the indexer chooses keyword-aware defaults.
495
+ out = self.indexer.search_agents(filters, options)
496
+ if isinstance(out, dict):
497
+ return out.get("items") or []
498
+ return out or []
504
499
 
505
500
  # Feedback methods are defined later in this class (single authoritative API).
506
501
 
@@ -559,8 +554,6 @@ class SDK:
559
554
  minValue: Optional[float] = None,
560
555
  maxValue: Optional[float] = None,
561
556
  include_revoked: bool = False,
562
- first: int = 100,
563
- skip: int = 0,
564
557
  agents: Optional[List["AgentId"]] = None,
565
558
  ) -> List["Feedback"]:
566
559
  """Search feedback.
@@ -602,8 +595,6 @@ class SDK:
602
595
  minValue=minValue,
603
596
  maxValue=maxValue,
604
597
  include_revoked=include_revoked,
605
- first=first,
606
- skip=skip,
607
598
  )
608
599
 
609
600
  def revokeFeedback(
@@ -21,7 +21,7 @@ class SemanticSearchClient:
21
21
  def __init__(
22
22
  self,
23
23
  base_url: str = "https://semantic-search.ag0.xyz",
24
- timeout_seconds: float = 10.0,
24
+ timeout_seconds: float = 20.0,
25
25
  ):
26
26
  self.base_url = base_url.rstrip("/")
27
27
  self.timeout_seconds = timeout_seconds
@@ -30,11 +30,15 @@ class SemanticSearchClient:
30
30
  if not query or not query.strip():
31
31
  return []
32
32
 
33
- body = {"query": query.strip()}
34
- if min_score is not None:
35
- body["minScore"] = min_score
36
- if top_k is not None:
37
- body["topK"] = top_k
33
+ # SDK defaults (applied here so developers don't need to pass them).
34
+ # - minScore: 0.5
35
+ # - topK: 5000 (API expects "limit" not "topK" in v1)
36
+ if min_score is None:
37
+ min_score = 0.5
38
+ if top_k is None:
39
+ top_k = 5000
40
+
41
+ body = {"query": query.strip(), "minScore": min_score, "limit": top_k}
38
42
 
39
43
  resp = requests.post(
40
44
  f"{self.base_url}/api/v1/search",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent0-sdk
3
- Version: 1.5.0b1
3
+ Version: 1.5.1b1
4
4
  Summary: Python SDK for agent portability, discovery and trust based on ERC-8004
5
5
  Author-email: Agent0 Team <team@ag0.xyz>
6
6
  License: MIT License
@@ -104,10 +104,10 @@ Agent0 SDK enables you to:
104
104
  pip install agent0-sdk
105
105
  ```
106
106
 
107
- To install the **1.5.0 pre-release** explicitly:
107
+ To install the **1.5.1 pre-release** explicitly:
108
108
 
109
109
  ```bash
110
- pip install --pre agent0-sdk==1.5.0b1
110
+ pip install --pre agent0-sdk==1.5.1b1
111
111
  ```
112
112
 
113
113
  ### Install from Source
@@ -212,10 +212,10 @@ results = sdk.searchAgents(
212
212
  "x402support": True,
213
213
  "feedback": {"minValue": 80, "tag": "enterprise", "includeRevoked": False},
214
214
  },
215
- options={"pageSize": 20, "sort": ["updatedAt:desc"]},
215
+ options={"sort": ["updatedAt:desc"]},
216
216
  )
217
217
 
218
- for agent in results['items']:
218
+ for agent in results:
219
219
  print(f"{agent.name}: {agent.description}")
220
220
  print(f" Tools: {agent.mcpTools}")
221
221
  print(f" Skills: {agent.a2aSkills}")
@@ -365,6 +365,151 @@ The SDK includes complete OASF v0.8.0 taxonomy files:
365
365
 
366
366
  Browse these files to find appropriate skill and domain slugs. For more information, see the [OASF specification](https://github.com/agntcy/oasf) and [Release Notes v0.31](RELEASE_NOTES_0.31.md).
367
367
 
368
+ ## Unified Search Reference (Exhaustive)
369
+
370
+ The unified search API is:
371
+
372
+ ```python
373
+ results = sdk.searchAgents(filters: dict | SearchFilters | None = None, options: dict | SearchOptions | None = None)
374
+ # results: list[AgentSummary]
375
+ ```
376
+
377
+ ### `FeedbackFilters` (used as `filters["feedback"]`)
378
+
379
+ ```python
380
+ @dataclass
381
+ class FeedbackFilters:
382
+ hasFeedback: Optional[bool] = None
383
+ hasNoFeedback: Optional[bool] = None
384
+ includeRevoked: Optional[bool] = None
385
+ minValue: Optional[float] = None
386
+ maxValue: Optional[float] = None
387
+ minCount: Optional[int] = None
388
+ maxCount: Optional[int] = None
389
+ fromReviewers: Optional[List[Address]] = None
390
+ endpoint: Optional[str] = None # substring match
391
+ hasResponse: Optional[bool] = None
392
+ tag1: Optional[str] = None
393
+ tag2: Optional[str] = None
394
+ tag: Optional[str] = None # matches tag1 OR tag2
395
+ ```
396
+
397
+ | Field | Semantics |
398
+ | --- | --- |
399
+ | `hasFeedback` / `hasNoFeedback` | Filter by whether the agent has any feedback |
400
+ | `includeRevoked` | Include revoked feedback entries in the pool used for filtering |
401
+ | `minValue` / `maxValue` | Threshold on **average value** over feedback matching the other feedback constraints (inclusive) |
402
+ | `minCount` / `maxCount` | Threshold on **count** over feedback matching the other feedback constraints (inclusive) |
403
+ | `fromReviewers` | Only consider feedback from these reviewer wallets |
404
+ | `endpoint` | Only consider feedback whose `endpoint` contains this substring |
405
+ | `hasResponse` | Only consider feedback that has at least one response (if supported) |
406
+ | `tag1` / `tag2` | Only consider feedback matching tag1/tag2 |
407
+ | `tag` | Shorthand: match either tag1 OR tag2 |
408
+
409
+ ### `SearchFilters`
410
+
411
+ ```python
412
+ DateLike = Union[datetime, str, int]
413
+
414
+ @dataclass
415
+ class SearchFilters:
416
+ chains: Optional[Union[List[ChainId], Literal["all"]]] = None
417
+ agentIds: Optional[List[AgentId]] = None
418
+
419
+ name: Optional[str] = None
420
+ description: Optional[str] = None
421
+
422
+ owners: Optional[List[Address]] = None
423
+ operators: Optional[List[Address]] = None
424
+
425
+ hasRegistrationFile: Optional[bool] = None
426
+ hasWeb: Optional[bool] = None
427
+ hasMCP: Optional[bool] = None
428
+ hasA2A: Optional[bool] = None
429
+ hasOASF: Optional[bool] = None
430
+ hasEndpoints: Optional[bool] = None
431
+
432
+ webContains: Optional[str] = None
433
+ mcpContains: Optional[str] = None
434
+ a2aContains: Optional[str] = None
435
+ ensContains: Optional[str] = None
436
+ didContains: Optional[str] = None
437
+
438
+ walletAddress: Optional[Address] = None
439
+
440
+ supportedTrust: Optional[List[str]] = None
441
+ a2aSkills: Optional[List[str]] = None
442
+ mcpTools: Optional[List[str]] = None
443
+ mcpPrompts: Optional[List[str]] = None
444
+ mcpResources: Optional[List[str]] = None
445
+ oasfSkills: Optional[List[str]] = None
446
+ oasfDomains: Optional[List[str]] = None
447
+
448
+ active: Optional[bool] = None
449
+ x402support: Optional[bool] = None
450
+
451
+ registeredAtFrom: Optional[DateLike] = None
452
+ registeredAtTo: Optional[DateLike] = None
453
+ updatedAtFrom: Optional[DateLike] = None
454
+ updatedAtTo: Optional[DateLike] = None
455
+
456
+ hasMetadataKey: Optional[str] = None
457
+ metadataValue: Optional[Dict[str, str]] = None # { key, value }
458
+
459
+ keyword: Optional[str] = None
460
+ feedback: Optional[FeedbackFilters] = None
461
+ ```
462
+
463
+ ### `SearchOptions`
464
+
465
+ ```python
466
+ @dataclass
467
+ class SearchOptions:
468
+ sort: Optional[List[str]] = None
469
+ semanticMinScore: Optional[float] = None
470
+ semanticTopK: Optional[int] = None
471
+ ```
472
+
473
+ ### `AgentSummary` (returned items)
474
+
475
+ ```python
476
+ @dataclass
477
+ class AgentSummary:
478
+ chainId: ChainId
479
+ agentId: AgentId
480
+ name: str
481
+ image: Optional[URI]
482
+ description: str
483
+ owners: List[Address]
484
+ operators: List[Address]
485
+ # Endpoint strings (present when advertised; not booleans)
486
+ mcp: Optional[str] = None
487
+ a2a: Optional[str] = None
488
+ web: Optional[str] = None
489
+ email: Optional[str] = None
490
+ ens: Optional[str] = None
491
+ did: Optional[str] = None
492
+ walletAddress: Optional[Address] = None
493
+ supportedTrusts: List[str] = field(default_factory=list)
494
+ a2aSkills: List[str] = field(default_factory=list)
495
+ mcpTools: List[str] = field(default_factory=list)
496
+ mcpPrompts: List[str] = field(default_factory=list)
497
+ mcpResources: List[str] = field(default_factory=list)
498
+ oasfSkills: List[str] = field(default_factory=list)
499
+ oasfDomains: List[str] = field(default_factory=list)
500
+ active: bool = False
501
+ x402support: bool = False
502
+ createdAt: Optional[int] = None
503
+ updatedAt: Optional[int] = None
504
+ lastActivity: Optional[int] = None
505
+ agentURI: Optional[str] = None
506
+ agentURIType: Optional[str] = None
507
+ feedbackCount: Optional[int] = None
508
+ averageValue: Optional[float] = None
509
+ semanticScore: Optional[float] = None
510
+ extras: Dict[str, Any] = field(default_factory=dict)
511
+ ```
512
+
368
513
  ## Use Cases
369
514
 
370
515
  - **Building agent marketplaces** - Create platforms where developers can discover, evaluate, and integrate agents based on their capabilities and reputation
@@ -374,10 +519,9 @@ Browse these files to find appropriate skill and domain slugs. For more informat
374
519
 
375
520
  ## 🚀 Coming Soon
376
521
 
377
- - More chains (currently Ethereum Sepolia + Ethereum Mainnet)
522
+ - More chains (currently Ethereum Mainnet + Ethereum Sepolia + Polygon Mainnet)
378
523
  - Support for validations
379
524
  - Enhanced x402 payments
380
- - Semantic/Vectorial search
381
525
  - Advanced reputation aggregation
382
526
  - Import/Export to centralized catalogues
383
527
 
@@ -1,22 +1,22 @@
1
- agent0_sdk/__init__.py,sha256=XAcKn73_sk5qlTtmT4w_LDMRvwYjPWbn1qppyWh82r4,1190
1
+ agent0_sdk/__init__.py,sha256=l-IYzlB87rfM6Rigthoasgc80HmQ-BHHbJENZU6St6I,1190
2
2
  agent0_sdk/core/agent.py,sha256=P3AX7zm4G5qkWdTJcjOvR69cCyOovHefbRoKejj6QKY,48062
3
3
  agent0_sdk/core/contracts.py,sha256=EVxtxc5z6hI7p40Va5ibu0Pssmi6Y6UEG1_wfO7TZ_U,22942
4
4
  agent0_sdk/core/endpoint_crawler.py,sha256=QBkFc3tBSQqHj6PtSTZ5D3_HVB00KJZJdxE3uYpI9po,13611
5
- agent0_sdk/core/feedback_manager.py,sha256=gHCyBYK17Yc5HcxDcbhl_blXYqulYO-7oiEvoPQomms,42585
6
- agent0_sdk/core/indexer.py,sha256=pCVrgWXVVJJMAu_ABs-nweAK9rZ-DR2uMSA51T7KaPY,102199
5
+ agent0_sdk/core/feedback_manager.py,sha256=rgQSxjNlEtBLN_bzQ1rnPL2kuaHCHM5vIEyw7Uitg3Q,42696
6
+ agent0_sdk/core/indexer.py,sha256=apXiAA-kYEcRMv6s8NgiguwinPs3cKihLZ4B8jqaPAE,75122
7
7
  agent0_sdk/core/ipfs_client.py,sha256=17XXMpJgLWhcNUSkmduAZt409c8oJXlj9C_eTGVk-Io,14185
8
- agent0_sdk/core/models.py,sha256=ssgMPzCv7ykalF9je9KqFLD4ep_lAYU_P9E8L8fl0Lw,14451
8
+ agent0_sdk/core/models.py,sha256=xZc93KKzsgc1cm0yymN2lFaMFv6MuaUNS9tcxT6Lktg,14383
9
9
  agent0_sdk/core/oasf_validator.py,sha256=ZOtYYzQd7cJj3eJegi7Ch5ydoapJEjaJSxMvwzKSp5o,2980
10
- agent0_sdk/core/sdk.py,sha256=JjBEpDvnoOSEkZcr9vPqjzaDCUcrJobY43o3oICgiRY,27632
11
- agent0_sdk/core/semantic_search_client.py,sha256=dMI9dT2MtgdlYE07ttPgOPV2yusdlD9C-DMHNEj7wrA,1837
10
+ agent0_sdk/core/sdk.py,sha256=TKagv6AufrCWFmfOa79yODa6--PP4tt5G8UCXWS59N0,27484
11
+ agent0_sdk/core/semantic_search_client.py,sha256=MrWMKmZ6qQhqKiIDiS2W5Aop4ak-YQ9VastIVlVzL0c,2013
12
12
  agent0_sdk/core/subgraph_client.py,sha256=VBHSdMKIr-DLRKu0bGQMBC_fdxI8SgNMqVLpPWYuQc0,27374
13
13
  agent0_sdk/core/transaction_handle.py,sha256=tKo6ny02m3eIeDGo0Wjikf-yUtl_8KYJy5YxFkPvyHo,1958
14
14
  agent0_sdk/core/value_encoding.py,sha256=NQUUvjTRAr5Tqj8t4HUGlfhak8VDmB8E5WMlfAqJwVk,3311
15
15
  agent0_sdk/core/web3_client.py,sha256=9w5ZgHILteCHSOisae3QluwuIsX3OD-VkoAc01koQWA,13786
16
16
  agent0_sdk/taxonomies/all_domains.json,sha256=buM8_6mpY8_AMbBIPzM-gtu14Tl30QDmhuQxxrlJU4c,74625
17
17
  agent0_sdk/taxonomies/all_skills.json,sha256=WVsutw3fqoj1jfDPru3CyWTr1kc1a5-EhBOWPfXnEi8,47483
18
- agent0_sdk-1.5.0b1.dist-info/licenses/LICENSE,sha256=rhZZbZm_Ovz4Oa9LNQ-ms8a1tA36wWh90ZkC0OR7WMw,1072
19
- agent0_sdk-1.5.0b1.dist-info/METADATA,sha256=-GtWe1NHrXnsAKDrEwM67K61yG-4Lr4hnRjkUJ_qoOU,15431
20
- agent0_sdk-1.5.0b1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
21
- agent0_sdk-1.5.0b1.dist-info/top_level.txt,sha256=p4520WUKNfhU0lVWJgkrB_jdeUfvHSY3K18k4oYLNfI,11
22
- agent0_sdk-1.5.0b1.dist-info/RECORD,,
18
+ agent0_sdk-1.5.1b1.dist-info/licenses/LICENSE,sha256=rhZZbZm_Ovz4Oa9LNQ-ms8a1tA36wWh90ZkC0OR7WMw,1072
19
+ agent0_sdk-1.5.1b1.dist-info/METADATA,sha256=srsv0FCyL6LWGo3zldnLEHVH-CQAXQ7lnAqSnRoIc_k,20216
20
+ agent0_sdk-1.5.1b1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
21
+ agent0_sdk-1.5.1b1.dist-info/top_level.txt,sha256=p4520WUKNfhU0lVWJgkrB_jdeUfvHSY3K18k4oYLNfI,11
22
+ agent0_sdk-1.5.1b1.dist-info/RECORD,,