import logging from pydantic import BaseModel from instructor import Instructions logging.basicConfig(level=logging.INFO) # Usage instructions = Instructions( name="three_digit_multiply", finetune_format="messages", log_handlers=[ logging.FileHandler("math_finetunes.jsonl"), ], ) class Response(BaseModel): a: int b: int result: int @instructions.distil def fn(a: int, b: int, c: str) -> Response: """_summary_ Args: a (int): _description_ b (int): _description_ c (str): _description_ Returns: Response: _description_ """ resp = a + b return Response(a=a, b=b, result=resp) if __name__ == "__main__": import random # A log will look like this: log_line = { "messages": [ { "role": "system", "content": 'Predict the results of this function:\n\ndef fn(a: int, b: int, c: str) -> __main__.Response\n"""\n_summary_\n\nArgs:\n a (int): _description_\n b (int): _description_\n c (str): _description_\n\nReturns:\n Response: _description_\n"""', }, {"role": "user", "content": 'Return fn(133, b=539, c="hello")'}, { "role": "assistant", "function_call": { "name": "Response", "arguments": '{"a":133,"b":539,"result":672}', }, }, ], "functions": [ { "name": "Response", "description": "Correctly extracted `Response` with all the required parameters with correct types", "parameters": { "properties": { "a": {"type": "integer"}, "b": {"type": "integer"}, "result": {"type": "integer"}, }, "required": ["a", "b", "result"], "type": "object", }, } ], } for _ in range(10): a = random.randint(100, 999) b = random.randint(100, 999) print("returning", fn(a, b=b, c="hello"))