Spaces:
Sleeping
Sleeping
| from typing import List | |
| from langchain_ollama import OllamaLLM | |
| from langchain.output_parsers import PydanticOutputParser | |
| from langchain_core.prompts import PromptTemplate | |
| from langchain_core.pydantic_v1 import BaseModel, Field | |
| llm = OllamaLLM(model="gemma2", temperature=0.8) | |
| class Person(BaseModel): | |
| name: str = Field(description="Person's name") | |
| age: int = Field(description="Person's age") | |
| nationality: str = Field(description="Person's nationality") | |
| gender: str = Field(description="Person's gender") | |
| description: str = Field(description="Person's description") | |
| occupation: str = Field(description="Person's occupation") | |
| known_languages: str = Field( | |
| description="Person's known languages it could be one or more") | |
| class Witness(Person): | |
| testimony: str = Field(description="Witness's testimony") | |
| class Suspect(Person): | |
| guilty: bool = Field(description="Suspect's guilt") | |
| background: str = Field( | |
| description="Suspect's background during the crime") | |
| class Crime(BaseModel): | |
| suspects: List[Suspect] | |
| witnesses: List[Witness] | |
| event: str = Field( | |
| description="A long description with all the details about the crime with date, aproximetly time and place") | |
| date: str = Field(description="Crime date") | |
| location: str = Field(description="Crime location") | |
| summary: str = Field(description="Brief description of the crime") | |
| motive: str = Field(description="Motive of the crime") | |
| parser = PydanticOutputParser(pydantic_object=Crime) | |
| prompt = PromptTemplate( | |
| template="Create a crime in {country} in all the text should be in the language of this country, and a list with {suspects} suspects and {witnesses} where only one of the suspects is guilty. \n {format_instructions}", | |
| input_variables=["suspects", "witnesses"], | |
| partial_variables={ | |
| "format_instructions": parser.get_format_instructions()}, | |
| ) | |
| def generate_crime(suspects, witnesses, country): | |
| chain = prompt | llm | parser | |
| output = chain.invoke( | |
| {"suspects": suspects, "witnesses": witnesses, "country": country}) | |
| return output | |