File size: 7,408 Bytes
bd67f06
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
"""Root landing page HTML for the SimLab HR Space on Hugging Face."""

LANDING_HTML = """<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SimLab HR — AI Recruiting & People Management Agent Environment</title>
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
  * { margin: 0; padding: 0; box-sizing: border-box; }
  body { font-family: 'DM Sans', sans-serif; background: #0a0e17; color: #e2e8f0; min-height: 100vh; }
  a { color: #60a5fa; text-decoration: none; }
  a:hover { text-decoration: underline; }
  code { font-family: 'JetBrains Mono', monospace; background: #1e293b; padding: 2px 6px; border-radius: 4px; font-size: 0.85em; }
  pre { font-family: 'JetBrains Mono', monospace; background: #1e293b; padding: 16px 20px; border-radius: 8px; overflow-x: auto; font-size: 0.85em; line-height: 1.6; }
  .container { max-width: 900px; margin: 0 auto; padding: 40px 24px 60px; }
  .badge { display: inline-block; padding: 4px 10px; border-radius: 20px; font-size: 0.75em; font-weight: 500; margin-right: 6px; }
  .badge-green { background: #065f46; color: #6ee7b7; }
  .badge-blue { background: #1e3a5f; color: #93c5fd; }
  .badge-purple { background: #3b1f6e; color: #c4b5fd; }

  h1 { font-size: 2em; font-weight: 700; margin: 16px 0 8px; line-height: 1.2; }
  .subtitle { font-size: 1.1em; color: #94a3b8; margin-bottom: 32px; }
  h2 { font-size: 1.3em; font-weight: 700; margin: 36px 0 16px; color: #f1f5f9; }
  p { line-height: 1.7; color: #cbd5e1; margin-bottom: 12px; }

  .servers { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 12px; margin: 20px 0 28px; }
  .server-card { background: #1e293b; border: 1px solid #334155; border-radius: 10px; padding: 16px; }
  .server-card h3 { font-size: 1em; font-weight: 700; margin-bottom: 4px; color: #f8fafc; }
  .server-card p { font-size: 0.85em; color: #94a3b8; margin: 0; line-height: 1.4; }
  .server-card .port { font-family: 'JetBrains Mono', monospace; font-size: 0.75em; color: #64748b; }

  .tasks-table { width: 100%; border-collapse: collapse; margin: 12px 0 24px; }
  .tasks-table th { text-align: left; padding: 8px 12px; font-size: 0.85em; color: #64748b; border-bottom: 1px solid #334155; }
  .tasks-table td { padding: 8px 12px; font-size: 0.9em; border-bottom: 1px solid #1e293b; }

  .cta { background: linear-gradient(135deg, #1e3a5f, #1e293b); border: 1px solid #334155; border-radius: 12px; padding: 24px; margin: 28px 0; }
  .cta h3 { font-size: 1.1em; margin-bottom: 8px; color: #f8fafc; }
  .cta p { margin-bottom: 12px; }
  .cta a.btn { display: inline-block; padding: 10px 20px; background: #2563eb; color: #fff; border-radius: 8px; font-weight: 500; }
  .cta a.btn:hover { background: #1d4ed8; text-decoration: none; }

  .links { display: flex; gap: 12px; flex-wrap: wrap; margin: 20px 0; }
  .links a { padding: 8px 16px; border: 1px solid #334155; border-radius: 8px; font-size: 0.9em; color: #93c5fd; }
  .links a:hover { background: #1e293b; text-decoration: none; }

  .footer { margin-top: 48px; padding-top: 24px; border-top: 1px solid #1e293b; color: #475569; font-size: 0.85em; }
</style>
</head>
<body>
<div class="container">
  <div>
    <span class="badge badge-green">OpenEnv</span>
    <span class="badge badge-blue">4 Tool Servers</span>
    <span class="badge badge-purple">14+ Tasks</span>
  </div>

  <h1>SimLab HR</h1>
  <p class="subtitle">AI Recruiting &amp; People Management Agent Environment</p>

  <p>
    A fully-functional HR simulation for training, evaluating, and benchmarking AI agents.
    Your agent gets a task &mdash; <em>"schedule a phone screen"</em>, <em>"approve a leave request"</em>,
    <em>"onboard a new hire"</em> &mdash; and a real workplace with an HRMS, email, calendar, and team chat.
  </p>

  <div class="links">
    <a href="/api/docs">API Docs (Swagger)</a>
    <a href="https://github.com/collinear-ai/simlab" target="_blank">GitHub (SimLab)</a>
    <a href="https://platform.collinear.ai" target="_blank">Get API Key</a>
  </div>

  <h2>4 Tool Servers, 1 Environment</h2>
  <div class="servers">
    <div class="server-card">
      <h3>HRMS</h3>
      <p>Employee records, leave management, attendance, payroll</p>
      <span class="port">:8030</span>
    </div>
    <div class="server-card">
      <h3>Email</h3>
      <p>Send and read emails, inbox management</p>
      <span class="port">:8040</span>
    </div>
    <div class="server-card">
      <h3>Calendar</h3>
      <p>Schedule meetings, check availability, manage events</p>
      <span class="port">:8050</span>
    </div>
    <div class="server-card">
      <h3>RocketChat</h3>
      <p>Team messaging, channels, direct messages</p>
      <span class="port">:8060</span>
    </div>
  </div>

  <h2>Quickstart</h2>
<pre>from simlab_hr import HRAction
from simlab_hr.client import HREnv

client = HREnv(base_url="http://localhost:8000")

with client:
    obs = client.reset()
    print(obs.observation.task_instruction)

    result = client.step(HRAction(
        tool_server="hrms",
        tool_name="get_leave_balance",
        parameters={"employee_id": "EMP-0042"}
    ))</pre>

  <h2>Sample Tasks</h2>
  <table class="tasks-table">
    <tr><th>Difficulty</th><th>Example</th></tr>
    <tr><td><span class="badge badge-green">Easy</span></td><td>Approve a leave request, update an employee's designation</td></tr>
    <tr><td><span class="badge badge-blue">Medium</span></td><td>Schedule a phone screen + send confirmation, run attendance report</td></tr>
    <tr><td><span class="badge badge-purple">Hard</span></td><td>Multi-person panel interview scheduling, full onboarding flow</td></tr>
  </table>
  <p>8 tasks included out of the box. Every task requires coordinating across multiple tool servers.</p>

  <div class="cta">
    <h3>Unlock 14+ Tasks from the API</h3>
    <p>Set <code>COLLINEAR_API_KEY</code> to access the full task set with real HR scenarios &mdash; recruiting workflows, people management, compliance tasks, and more.</p>
    <a class="btn" href="https://platform.collinear.ai" target="_blank">Get a Free API Key &rarr;</a>
  </div>

  <h2>Run Locally</h2>
<pre>git clone https://github.com/collinear-ai/simlab.git
cd simlab/envs/simlab_hr
docker compose up</pre>

  <h2>More Environments</h2>
  <p>SimLab includes <strong>5 enterprise simulation scenarios</strong> with <strong>14 tool servers</strong>:</p>
  <table class="tasks-table">
    <tr><th>Scenario</th><th>Tools</th></tr>
    <tr><td><strong>Human Resources</strong> &larr; you are here</td><td>HRMS, email, calendar, team chat</td></tr>
    <tr><td>Customer Service</td><td>Helpdesk ticketing, team chat, email</td></tr>
    <tr><td>Finance</td><td>SEC filings, market data, Google Workspace</td></tr>
    <tr><td>Coding</td><td>Sandboxed IDE, browser automation, team chat</td></tr>
    <tr><td>CRM</td><td>Contacts, deals, pipelines, activities</td></tr>
  </table>
<pre>pip install simulationlab
simlab templates list</pre>

  <div class="footer">
    <p>Apache 2.0 &mdash; <a href="https://collinear.ai">Collinear AI</a> &middot; <a href="https://github.com/collinear-ai/simlab">GitHub</a> &middot; <a href="https://docs.collinear.ai">Docs</a></p>
  </div>
</div>
</body>
</html>"""