@@ -79,6 +79,7 @@ class SemanticSearchResult(BaseModel):
7979 similarity_score : float
8080 label : str
8181 description : str
82+ project_id : str = "global"
8283
8384
8485class 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
9295class 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