Skip to content

Commit

Permalink
Add role documentation, add system begin & end tokens (#793)
Browse files Browse the repository at this point in the history
  • Loading branch information
objnf-dev authored Jul 29, 2024
1 parent 325a06c commit 8f6274c
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 3 deletions.
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,24 @@ for out in state.text_iter():
print(out, end="", flush=True)
```

#### Roles

Use `sgl.system``sgl.user` and `sgl.assistant` to set roles when using Chat models. You can also define more complex role prompts using begin and end tokens.

```python
@sgl.function
def chat_example(s):
s += sgl.system("You are a helpful assistant.")
# Same as: s += s.system("You are a helpful assistant.")

with s.user():
s += "Question: What is the capital of France?"

s += sgl.assistant_begin()
s += "Answer: " + sgl.gen(max_tokens=100, stop="\n")
s += sgl.assistant_end()
```

#### Tips and Implementation Details
- The `choices` argument in `sgl.gen` is implemented by computing the [token-length normalized log probabilities](https://blog.eleuther.ai/multiple-choice-normalization/) of all choices and selecting the one with the highest probability.
- The `regex` argument in `sgl.gen` is implemented through autoregressive decoding with logit bias masking, according to the constraints set by the regex. It is compatible with `temperature=0` and `temperature != 0`.
Expand Down
4 changes: 4 additions & 0 deletions python/sglang/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
select,
set_default_backend,
system,
system_begin,
system_end,
user,
user_begin,
user_end,
Expand Down Expand Up @@ -60,4 +62,6 @@
"user_end",
"assistant_begin",
"assistant_end",
"system_begin",
"system_end",
]
8 changes: 8 additions & 0 deletions python/sglang/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,14 @@ def assistant(expr: Optional[SglExpr] = None):
return _role_common("assistant", expr)


def system_begin():
return SglRoleBegin("system")


def system_end():
return SglRoleEnd("system")


def user_begin():
return SglRoleBegin("user")

Expand Down
6 changes: 3 additions & 3 deletions python/sglang/lang/interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -705,9 +705,9 @@ def __init__(self, stream_executor: StreamExecutor):

def _role_common(self, name: str, expr: Optional[SglExpr] = None):
if expr is not None:
self.stream_executor.submit(
SglExprList([SglRoleBegin(name), expr, SglRoleEnd(name)])
)
role_expr = SglExprList([SglRoleBegin(name), expr, SglRoleEnd(name)])
self.stream_executor.submit(role_expr)
return role_expr
else:

@contextmanager
Expand Down

0 comments on commit 8f6274c

Please sign in to comment.