asterioskryos commited on
Commit
cc5137a
·
1 Parent(s): d073844

Use template space in new_project

Browse files
Files changed (1) hide show
  1. main.py +18 -6
main.py CHANGED
@@ -142,7 +142,7 @@ class HF:
142
  def user(self) -> str | None:
143
  return self._user
144
 
145
- async def create(self, name: str, secrets: dict[str, str] | None = None) -> dict[str, Any]:
146
  if not self._ok:
147
  return {"error": "no hf token"}
148
  try:
@@ -150,13 +150,24 @@ class HF:
150
  sn = name.lower().replace(" ", "-").replace("_", "-")
151
  rid = f"{self._user}/{sn}"
152
  async with httpx.AsyncClient() as c:
153
- r = await c.post(
154
- "https://huggingface.co/api/repos/create",
155
- headers={"Authorization": f"Bearer {self._token}", "Content-Type": "application/json"},
156
- json={"name": sn, "type": "space", "sdk": "docker"},
157
- )
 
 
 
 
 
 
 
 
 
 
158
  if not r.is_success:
159
  return {"error": r.text[:200]}
 
160
  if secrets:
161
  for k, v in secrets.items():
162
  await c.post(
@@ -263,6 +274,7 @@ async def new_project(body: CreateIn):
263
  sp = await hf.create(
264
  body.name or f"oc-{e.id}",
265
  {"HF_TOKEN": os.environ.get("HF_TOKEN", ""), "PROJECT": e.id},
 
266
  )
267
  if "error" not in sp:
268
  e.space_id = sp["space"]
 
142
  def user(self) -> str | None:
143
  return self._user
144
 
145
+ async def create(self, name: str, secrets: dict[str, str] | None = None, template_repo: str | None = None) -> dict[str, Any]:
146
  if not self._ok:
147
  return {"error": "no hf token"}
148
  try:
 
150
  sn = name.lower().replace(" ", "-").replace("_", "-")
151
  rid = f"{self._user}/{sn}"
152
  async with httpx.AsyncClient() as c:
153
+ if template_repo:
154
+ # Duplicate from template
155
+ r = await c.post(
156
+ f"https://huggingface.co/api/repos/{template_repo}/duplicate",
157
+ headers={"Authorization": f"Bearer {self._token}", "Content-Type": "application/json"},
158
+ json={"name": sn, "type": "space"},
159
+ )
160
+ else:
161
+ # Create blank
162
+ r = await c.post(
163
+ "https://huggingface.co/api/repos/create",
164
+ headers={"Authorization": f"Bearer {self._token}", "Content-Type": "application/json"},
165
+ json={"name": sn, "type": "space", "sdk": "docker"},
166
+ )
167
+
168
  if not r.is_success:
169
  return {"error": r.text[:200]}
170
+
171
  if secrets:
172
  for k, v in secrets.items():
173
  await c.post(
 
274
  sp = await hf.create(
275
  body.name or f"oc-{e.id}",
276
  {"HF_TOKEN": os.environ.get("HF_TOKEN", ""), "PROJECT": e.id},
277
+ template_repo="asterioskryos/opencode-agent-template"
278
  )
279
  if "error" not in sp:
280
  e.space_id = sp["space"]