Spaces:
Build error
Build error
| import sys | |
| from yachalk import chalk | |
| sys.path.append("..") | |
| import json | |
| import ollama.client as client | |
| def extractConcepts(prompt: str, metadata={}, model="mistral-openorca:latest"): | |
| SYS_PROMPT = ( | |
| "Your task is to extract the key concepts (and non-personal entities) mentioned in the given context. " | |
| "Focus on identifying only the most important and fundamental concepts. If needed, break the concepts down into simpler, more atomic components. " | |
| "Ensure each concept is clear and distinct. " | |
| "Categorize each concept into one of the following categories: [event, concept, place, object, document, organisation, condition, misc].\n" | |
| "For each extracted concept, assess its contextual importance on a scale from 1 to 5, with 5 being the highest level of importance. " | |
| "Format your output as a JSON list with the following structure:\n" | |
| "[\n" | |
| " {\n" | |
| ' "entity": "The Concept",\n' | |
| ' "importance": "The contextual importance of the concept on a scale of 1 to 5",\n' | |
| ' "category": "The Type of Concept",\n' | |
| " },\n" | |
| " {\n" | |
| ' "entity": "Another Concept",\n' | |
| ' "importance": "The contextual importance of this concept on a scale of 1 to 5",\n' | |
| ' "category": "The Type of Concept",\n' | |
| " },\n" | |
| " // Additional concepts can be added in the same format\n" | |
| "]\n" | |
| "Ensure the output is well-structured and free of errors." | |
| ) | |
| response, _ = client.generate(model_name=model, system=SYS_PROMPT, prompt=prompt) | |
| try: | |
| result = json.loads(response) | |
| result = [dict(item, **metadata) for item in result] | |
| except: | |
| print("\n\nERROR ### Here is the buggy response: ", response, "\n\n") | |
| result = None | |
| return result | |
| def graphPrompt(input: str, metadata={}, model="mistral-openorca:latest"): | |
| if model == None: | |
| model = "mistral-openorca:latest" | |
| # model_info = client.show(model_name=model) | |
| # print( chalk.blue(model_info)) | |
| SYS_PROMPT = ( | |
| "You are a network graph maker who extracts terms and their relations from a given context. " | |
| "You are provided with a context chunk (delimited by ```) Your task is to extract the ontology " | |
| "of terms mentioned in the given context. These terms should represent the key concepts as per the context. \n" | |
| "Thought 1: While traversing through each sentence, Think about the key terms mentioned in it.\n" | |
| "\tTerms may include object, entity, location, organization, person, \n" | |
| "\tcondition, acronym, documents, service, concept, etc.\n" | |
| "\tTerms should be as atomistic as possible\n\n" | |
| "Thought 2: Think about how these terms can have one on one relation with other terms.\n" | |
| "\tTerms that are mentioned in the same sentence or the same paragraph are typically related to each other.\n" | |
| "\tTerms can be related to many other terms\n\n" | |
| "Thought 3: Find out the relation between each such related pair of terms. \n\n" | |
| "Format your output as a list of json. Each element of the list contains a pair of terms" | |
| "and the relation between them, like the follwing: \n" | |
| "[\n" | |
| " {\n" | |
| ' "node_1": "A concept from extracted ontology",\n' | |
| ' "node_2": "A related concept from extracted ontology",\n' | |
| ' "edge": "relationship between the two concepts, node_1 and node_2 in one or two sentences"\n' | |
| " }, {...}\n" | |
| "]" | |
| ) | |
| USER_PROMPT = f"context: ```{input}``` \n\n output: " | |
| response, _ = client.generate(model_name=model, system=SYS_PROMPT, prompt=USER_PROMPT) | |
| try: | |
| result = json.loads(response) | |
| result = [dict(item, **metadata) for item in result] | |
| except: | |
| print("\n\nERROR ### Here is the buggy response: ", response, "\n\n") | |
| result = None | |
| return result | |