From 146467e117dcbe5ccc4cc30b086b89f4231ac4bf Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 28 Oct 2024 08:15:20 -0400 Subject: [PATCH] working! --- simplemind/integrations/openai.py | 34 +++++++++++++++++++---------- t.py | 36 +++++++++++++++++++++++++++++-- t2.py | 32 +++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 t2.py diff --git a/simplemind/integrations/openai.py b/simplemind/integrations/openai.py index 87d0af9..d120c7e 100644 --- a/simplemind/integrations/openai.py +++ b/simplemind/integrations/openai.py @@ -39,18 +39,30 @@ class OpenAI(BaseClientProvider): return bool(len(self.available_models)) - def single_message(self, message, *, response_model=False, **kwargs): + def message(self, message, *, response_model=False, **kwargs): """Generates a response from the OpenAI client.""" + use_instructor = bool(response_model) - client = self.client if not response_model else self.instructor_client + client = self.instructor_client if use_instructor else self.client - completion = self.client.chat.completions.create( - model=self.model, - messages=[{"role": "user", "content": message}], - **kwargs, - ) + # Parameters for the OpenAI client. + params = { + "messages": [{"role": "user", "content": message}], + "model": self.model, + } + params.update(kwargs) - return AIResponse( - response=completion, - text=completion.choices[0].message.content, - ) + if use_instructor: + params["response_model"] = response_model + + # Make the request to OpenAI. + completion = client.chat.completions.create(**params) + + if use_instructor: + return completion.model_dump() + + else: + return AIResponse( + response=completion, + text=completion.choices[0].message.content, + ) diff --git a/t.py b/t.py index da96e2a..de740d8 100644 --- a/t.py +++ b/t.py @@ -1,18 +1,50 @@ +from pprint import pprint +from pydantic import BaseModel import simplemind context = None openai = simplemind.integrations.OpenAI() + +class YearlyData(BaseModel): + year: int + events: list[str] + + +class ProjectData(BaseModel): + name: str + description: str + url: str + github_url: str + + +class BioData(BaseModel): + bio: str + spouse_name: str + history: list[YearlyData] + fun_facts: list[str] + # age: int + # occupation: str + # bio: str + # affiliations: list[str] + + +class PersonData(BaseModel): + bio: BioData + projects: list[ProjectData] + yearly_breakdown: list[YearlyData] + + print(openai.test_connection()) print(openai.available_models) print() print() -message = "who is kennethreitz?" +message = "who is kenneth reitz?" print(f"> {message}") -print(openai.single_message(message)) +pprint(openai.message(message, response_model=BioData)) # claude = simplemind.integrations.Anthropic() diff --git a/t2.py b/t2.py new file mode 100644 index 0000000..81c4627 --- /dev/null +++ b/t2.py @@ -0,0 +1,32 @@ +import instructor +from pydantic import BaseModel +from openai import OpenAI + + +class ProjectInfo(BaseModel): + name: str + description: str + url: str + github_url: str + + +# Define your desired output structure +class UserInfo(BaseModel): + name: str + age: int + bio: str + projects: list[ProjectInfo] + + +# Patch the OpenAI client +client = instructor.from_openai(OpenAI()) + +# Extract structured data from natural language +user_info = client.chat.completions.create( + model="gpt-4o", + response_model=UserInfo, + messages=[{"role": "user", "content": "who is kennethreitz?"}], +) + +print(user_info.model_dump()) +# > 30