Skip to content

Commit 71457af

Browse files
Optinally support project_ids in the SDK search
1 parent c9c0358 commit 71457af

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

stackone_ai/semantic_search.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ class SemanticSearchResult(BaseModel):
7979
similarity_score: float
8080
label: str
8181
description: str
82+
project_id: str = "global"
8283

8384

8485
class SemanticSearchResponse(BaseModel):
@@ -87,6 +88,8 @@ class SemanticSearchResponse(BaseModel):
8788
results: list[SemanticSearchResult]
8889
total_count: int
8990
query: str
91+
connector_filter: str | None = None
92+
project_filter: str | None = None
9093

9194

9295
class SemanticSearchClient:
@@ -129,13 +132,16 @@ def search(
129132
query: str,
130133
connector: str | None = None,
131134
top_k: int | None = None,
135+
project_id: str | None = None,
132136
) -> SemanticSearchResponse:
133137
"""Search for relevant actions using semantic search.
134138
135139
Args:
136140
query: Natural language query describing what tools/actions you need
137141
connector: Optional connector/provider filter (e.g., "bamboohr", "slack")
138142
top_k: Maximum number of results to return. If not provided, uses the backend default.
143+
project_id: Optional project scope (e.g., "103/dev-56501"). When provided,
144+
results include both global actions and project-specific actions.
139145
140146
Returns:
141147
SemanticSearchResponse containing matching actions with similarity scores
@@ -158,6 +164,8 @@ def search(
158164
payload["top_k"] = top_k
159165
if connector:
160166
payload["connector"] = connector
167+
if project_id:
168+
payload["project_id"] = project_id
161169

162170
try:
163171
response = httpx.post(url, json=payload, headers=headers, timeout=self.timeout)
@@ -177,6 +185,7 @@ def search_action_names(
177185
connector: str | None = None,
178186
top_k: int | None = None,
179187
min_score: float = 0.0,
188+
project_id: str | None = None,
180189
) -> list[str]:
181190
"""Convenience method returning just action names.
182191
@@ -185,6 +194,7 @@ def search_action_names(
185194
connector: Optional connector/provider filter
186195
top_k: Maximum number of results. If not provided, uses the backend default.
187196
min_score: Minimum similarity score threshold (0-1)
197+
project_id: Optional project scope for multi-tenant filtering
188198
189199
Returns:
190200
List of action names sorted by relevance
@@ -196,5 +206,5 @@ def search_action_names(
196206
min_score=0.5
197207
)
198208
"""
199-
response = self.search(query, connector, top_k)
209+
response = self.search(query, connector, top_k, project_id)
200210
return [r.action_name for r in response.results if r.similarity_score >= min_score]

0 commit comments

Comments
 (0)