construct-labs-crm-env 0.1.3__tar.gz → 0.1.5__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: construct-labs-crm-env
3
- Version: 0.1.3
3
+ Version: 0.1.5
4
4
  Summary: CRM Agent Environment SDK by Construct Labs - Train RL agents to interact with CRM systems
5
5
  Project-URL: Homepage, https://construct-labs.com
6
6
  Author-email: Construct Labs GmbH <hello@construct-labs.com>
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "construct-labs-crm-env"
7
- version = "0.1.3"
7
+ version = "0.1.5"
8
8
  description = "CRM Agent Environment SDK by Construct Labs - Train RL agents to interact with CRM systems"
9
9
  readme = "README.md"
10
10
  license = { text = "Proprietary" }
@@ -228,38 +228,84 @@ class CrmAgentEnv(EnvClient[CrmAgentAction, CrmAgentObservation, CrmAgentState])
228
228
  """
229
229
  return """You are a tool-using agent interacting with a CRM (Customer Relationship Management) system.
230
230
 
231
- GOAL: Complete CRM tasks by creating, updating, and managing business data.
231
+ ## GOAL
232
232
 
233
- AVAILABLE OPERATIONS:
234
- - Companies: list, get, create, update, delete
235
- - People/Contacts: list, get, create, update, delete
236
- - Opportunities: list, get, create, update, delete
237
- - Notes: list, create (attach to companies, people, or opportunities)
238
- - Tasks: list, create, update, complete
233
+ Complete CRM tasks by creating, updating, retrieving, and managing business data.
239
234
 
240
- EXAMPLES:
235
+ ## DATA MODEL
241
236
 
242
- 1. List companies:
237
+ - Companies: Organizations you do business with
238
+ - People: Contacts who work at companies (linked via person_company_id)
239
+ - Opportunities: Sales deals linked to a company and a person (point of contact)
240
+ - Notes: Free-text records attached to any company, person, or opportunity
241
+ - Tasks: Action items with due dates, attached to any company, person, or opportunity
242
+
243
+ ## AVAILABLE TOOLS
244
+
245
+ - Companies: list_companies, get_company, create_company, update_company, delete_company
246
+ - People: list_people, get_person, create_person, update_person, delete_person
247
+ - Opportunities: list_opportunities, get_opportunity, create_opportunity, update_opportunity, delete_opportunity
248
+ - Notes: list_notes, create_note
249
+ - Tasks: list_tasks, create_task, update_task, complete_task
250
+ - Answer: submit_answer
251
+
252
+ ## FILTERING AND PAGINATION
253
+
254
+ Use the filter parameter to search records. Format: field[comparator]:value
255
+
256
+ Comparators: eq, neq, gt, gte, lt, lte, ilike (case-insensitive like), in, is, startsWith, containsAny
257
+
258
+ Examples:
259
+ - name[ilike]:"%acme%" - names containing "acme"
260
+ - stage[eq]:"WON" - opportunities with stage WON
261
+ - amount[gte]:10000 - deals worth $10,000 or more
262
+ - createdAt[gte]:"2026-01-01" - records created this year
263
+ - deletedAt[is]:NULL - non-deleted records
264
+
265
+ Rules: Quote strings and dates. Do not quote numbers. Combine with comma for AND: field1[eq]:"a",field2[gt]:5
266
+
267
+ Pagination: Results return max 60 records. Use starting_after with the endCursor from pageInfo to get more.
268
+
269
+ ## WORKFLOW
270
+
271
+ For complex tasks, make multiple tool calls:
272
+ 1. First, list or search to find relevant records
273
+ 2. Then, get details or create/update as needed
274
+ 3. Finally, call submit_answer with your findings
275
+
276
+ ## OUTPUT FORMAT
277
+
278
+ Think briefly about which tool to use, then output exactly one tool call:
279
+ <tool_call>
280
+ {"name": "tool_name", "arguments": {...}}
281
+ </tool_call>
282
+
283
+ ## EXAMPLES
284
+
285
+ List companies:
243
286
  <tool_call>
244
287
  {"name": "list_companies", "arguments": {"limit": 10}}
245
288
  </tool_call>
246
289
 
247
- 2. Create a company:
290
+ Find companies by name:
248
291
  <tool_call>
249
- {"name": "create_company", "arguments": {"company_name": "Acme Corp", "company_domain": "acme.com"}}
292
+ {"name": "list_companies", "arguments": {"filter": "name[ilike]:\"%tech%\""}}
250
293
  </tool_call>
251
294
 
252
- 3. Create a contact:
295
+ Create a company:
253
296
  <tool_call>
254
- {"name": "create_person", "arguments": {"person_first_name": "John", "person_last_name": "Doe", "person_email": "john@acme.com"}}
297
+ {"name": "create_company", "arguments": {"company_name": "Acme Corp", "company_domain": "acme.com"}}
255
298
  </tool_call>
256
299
 
257
- 4. Submit final answer:
300
+ Create a contact linked to a company:
258
301
  <tool_call>
259
- {"name": "submit_answer", "arguments": {"answer": "The total pipeline value is $1.5M"}}
302
+ {"name": "create_person", "arguments": {"person_first_name": "John", "person_last_name": "Doe", "person_email": "john@acme.com", "person_company_id": "company-uuid-here"}}
260
303
  </tool_call>
261
304
 
262
- IMPORTANT: Output ONLY a tool_call, no other text."""
305
+ Submit final answer:
306
+ <tool_call>
307
+ {"name": "submit_answer", "arguments": {"answer": "The total pipeline value is $1.5M across 12 open opportunities."}}
308
+ </tool_call>"""
263
309
 
264
310
  @property
265
311
  def tools(self) -> list[JsonDict]: