Untitled
unknown
plain_text
a year ago
3.7 kB
10
Indexable
from pydantic import BaseModel # Define your desired output structure class UserInfo(BaseModel): account: str department: str period: str subsidiary: str vendor: str def get_user_info(client, message: str) -> UserInfo: # Extract structured data from natural language user_info = client.chat.completions.create( model="gpt-3.5-turbo", response_model=UserInfo, messages=[{"role": "user", "content": message}], ) return user_info import boto3 from pydantic import BaseModel from typing import List class UserPrompt(BaseModel): query: str class SearchResultItem(BaseModel): id: str title: str content: str score: str subsidiary_full_name: str child_subsidiary_details: str subsidiary_id: str subsidiary_key: str class SearchResults(BaseModel): hits: List[SearchResultItem] found: int class CloudSearchClient: def __init__(self, domain_endpoint: str): self.client = boto3.client('cloudsearchdomain', endpoint_url=domain_endpoint) def search(self, query: str) -> SearchResults: response = self.client.search( query=query, queryParser='simple', size=10 ) search_results = [] for hit in response['hits']['hit']: search_results.append(SearchResultItem( id=hit['id'], title=hit['fields'].get('title', [''])[0], content=hit['fields'].get('content', [''])[0], score=hit['fields'].get('_score', [''])[0], subsidiary_full_name=hit['fields'].get('subsidiary_full_name', [''])[0], child_subsidiary_details=hit['fields'].get('child_subsidiary_details', [''])[0], subsidiary_id=hit['fields'].get('subsidiary_id', [''])[0], subsidiary_key=hit['fields'].get('subsidiary_key', [''])[0] )) return SearchResults( hits=search_results, found=response['hits']['found'] ) # Configuration file to store API keys and CloudSearch endpoint class Config: OPENAI_API_KEY = 'your_openai_api_key_here' CLOUDSEARCH_DOMAIN_ENDPOINT = 'your_cloudsearch_domain_endpoint_here' def merge_child_subsidiary_details(search_results) -> dict: merged_details = {} for item in search_results.hits: key = item.subsidiary_key details = item.child_subsidiary_details if key not in merged_details: merged_details[key] = [] merged_details[key].append(details) return merged_details import instructor from openai import OpenAI from config import Config from user_prompt_parser.py import get_user_info from cloudsearch_client import CloudSearchClient, UserPrompt from merging_util import merge_child_subsidiary_details def main(): # Initialize OpenAI client openai_client = instructor.from_openai(OpenAI(api_key=Config.OPENAI_API_KEY)) # User message message = "Give me all bills & bill credits for the pre-paid rent account and subsidiary DDE-US for Q2?" # Parse user prompt user_info = get_user_info(openai_client, message) # CloudSearch integration user_prompt = UserPrompt(query=user_info.subsidiary) cloudsearch_client = CloudSearchClient(Config.CLOUDSEARCH_DOMAIN_ENDPOINT) search_results = cloudsearch_client.search(user_prompt.query) # Merge child subsidiary details merged_details = merge_child_subsidiary_details(search_results) # Print results (or handle them as needed) print(search_results.json(indent=2)) print(json.dumps(merged_details, indent=2)) if __name__ == "__main__": main()
Editor is loading...
Leave a Comment