This commit is contained in:
2024-10-28 08:15:20 -04:00
parent 852083b58c
commit 146467e117
3 changed files with 89 additions and 13 deletions
+23 -11
View File
@@ -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,
)
+34 -2
View File
@@ -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()
+32
View File
@@ -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