mirror of
https://github.com/kennethreitz/instructor.git
synced 2026-06-05 22:50:18 +00:00
58bc3bae0f
* add streaming tasks * push docs
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
from typing import Iterable
|
|
import openai
|
|
import time
|
|
|
|
from openai_function_call import MultiTask, OpenAISchema
|
|
|
|
|
|
class User(OpenAISchema):
|
|
name: str
|
|
job: str
|
|
age: int
|
|
|
|
|
|
def stream_extract(input: str, cls) -> Iterable[User]:
|
|
MultiUser = MultiTask(cls)
|
|
completion = openai.ChatCompletion.create(
|
|
model="gpt-4-0613",
|
|
temperature=0.1,
|
|
stream=True,
|
|
functions=[MultiUser.openai_schema],
|
|
function_call={"name": MultiUser.openai_schema["name"]},
|
|
messages=[
|
|
{
|
|
"role": "system",
|
|
"content": "You are a perfect entity extraction system",
|
|
},
|
|
{
|
|
"role": "user",
|
|
"content": (
|
|
f"Consider the data below:\n{input}"
|
|
"Correctly segment it into entitites"
|
|
"Make sure the JSON is correct"
|
|
),
|
|
},
|
|
],
|
|
max_tokens=1000,
|
|
)
|
|
return MultiUser.from_streaming_response(completion)
|
|
|
|
|
|
start = time.time()
|
|
for user in stream_extract(
|
|
input="Create 10 characters from the book Three Body Problem",
|
|
cls=User,
|
|
):
|
|
delay = (time.time() - start) * 100
|
|
print(f"{int(delay)} ms: User({user})")
|
|
"""
|
|
561 ms: User(name='Ye Wenjie' job='Astrophysicist' age=50)
|
|
713 ms: User(name='Wang Miao' job='Nanomaterials Researcher' age=40)
|
|
836 ms: User(name='Shi Qiang' job='Detective' age=45)
|
|
1001 ms: User(name='Ding Yi' job='Theoretical Physicist' age=42)
|
|
1136 ms: User(name='Chang Weisi' job='Major General' age=55)
|
|
1274 ms: User(name='Zhang Beihai' job='Space Force Naval Officer' age=52)
|
|
1499 ms: User(name='Luo Ji' job='Astronomer' age=48)
|
|
1612 ms: User(name='Wei Cheng' job='Mathematician' age=46)
|
|
1774 ms: User(name='Shen Yufei' job='Physicist' age=39)
|
|
1904 ms: User(name='Pan Han' job='Engineer' age=43)
|
|
"""
|