Files
2023-11-08 14:45:36 -05:00

89 lines
2.4 KiB
Python

from typing import List
from enum import Enum
from pydantic import BaseModel, Field
import instructor
from openai import OpenAI
client = instructor.patch(OpenAI())
class CRMSource(Enum):
personal = "personal"
business = "business"
work_contacts = "work_contacts"
all = "all"
class CRMSearch(BaseModel):
"""A CRM search query
The search description is a natural language description of the search query
the backend will use semantic search so use a range of phrases to describe the search
"""
source: CRMSource
city_location: str = Field(
..., description="City location used to match the desired customer profile"
)
search_description: str = Field(
..., description="Search query used to match the desired customer profile"
)
class CRMSearchQuery(BaseModel):
"""
A set of CRM queries to be executed against a CRM system,
for large locations decompose into multiple queries of smaller locations
"""
queries: List[CRMSearch]
def query_crm(query: str) -> CRMSearchQuery:
queries = client.chat.completions.create(
model="gpt-3.5-turbo",
response_model=CRMSearchQuery,
messages=[
{
"role": "system",
"content": """
You are a world class CRM search career generator.
You will take the user query and decompose it into a set of CRM queries queries.
""",
},
{"role": "user", "content": query},
],
)
return queries
if __name__ == "__main__":
query = "find me all the pottery businesses in San Francisco and my friends in the east coast big cities"
print(query_crm(query).model_dump_json(indent=2))
"""
{
"queries": [
{
"source": "business",
"city_location": "San Francisco",
"search_description": "pottery businesses"
},
{
"source": "personal",
"city_location": "New York",
"search_description": "friends in New York"
},
{
"source": "personal",
"city_location": "Boston",
"search_description": "friends in Boston"
},
{
"source": "personal",
"city_location": "Philadelphia",
"search_description": "friends in Philadelphia"
}
]
}
"""