Skip to content

Instantly share code, notes, and snippets.

@cfcosta
Created March 2, 2024 21:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cfcosta/b44be7a928cc63dcd52041eb575f96cc to your computer and use it in GitHub Desktop.
Save cfcosta/b44be7a928cc63dcd52041eb575f96cc to your computer and use it in GitHub Desktop.
from dspy import InputField, OutputField, Signature, evaluate, ChainOfThought, Example, Module
from dspy.teleprompt.bootstrap import BootstrapFewShot
class Extract(Signature):
"""Extract the information from a given text using a json schema."""
input_text = InputField(desc="the text to extract information from")
json_schema = InputField(desc="the schema to use to extract the information")
output = OutputField(desc="the extracted information")
examples = [
Example(
input_text="Emissão de cotas seniores da 1ª (primeira) série, 1ª (primeira) emissão de cotas subordinadas mezanino e 1ª (primeira) emissão de cotas subordinadas júnior do AUTO LOANS FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS, inscrito no Cadastro Nacional da Pessoa Jurídica do Ministério da Economia (“CNPJ/ME”) sob o nº 40.794.358/0001-58 (“Fundo”, “Cotas Seniores”, “Cotas Subordinadas Mezanino” e “Cotas Subordinadas Júnior”, respectivamente), administrado pela BRL TRUST DISTRIBUIDORA DE TÍTULOS E VALORES MOBILIÁRIOS S.A., sociedade devidamente autorizada a funcionar pelo Banco Central do Brasil e autorizada pela Comissão de Valores Mobiliários (“CVM”) para o exercício profissional de administração de carteiras de valores mobiliários e fundos de investimentos, nos termos do Ato Declaratório CVM nº 11.784, de 30 de junho de 2011, com sede na cidade de São Paulo, Estado de São Paulo, na Rua Iguatemi, nº 151, 19º andar (parte), CEP 01451-011, inscrita no CNPJ/ME sob o nº 13.486.793/0001-42, neste ato representada nos termos do seu estatuto social (“Administradora”), composta por, (i) no máximo, 70.000.000 (setenta milhões), e, no mínimo, 35.000.000 (trinta e cinco milhões) de Cotas Seniores, com valor inicial unitário de R$1,00 (um real) cada, totalizando o montante de até R$70.000.000,00 (setenta milhões de reais) e de, no mínimo, R$35.000.000,00 (trinta e cinco milhões de reais) (“Montante Mínimo das Cotas Seniores”), (ii) no máximo, 15.000.000 (quinze milhões), e, no mínimo, 7.500.000 (sete milhões e quinhentas mil) Cotas Subordinadas Mezanino, com valor inicial unitário de R$1,00 (um real) cada, totalizando o montante de até R$15.000.000,00 (quinze milhões de reais) e de, no mínimo, R$7.500.000,00 (sete milhões e quinhentos mil reais) (“Montante Mínimo das Cotas Subordinadas Mezanino”), e (iii) 15.000.000 (quinze milhões) de Cotas Subordinadas Júnior, no valor inicial unitário de R$1,00 (um real), totalizando o montante de R$15.000.000,00 (quinze milhões de reais), distribuídas por meio de oferta pública com esforços restritos de colocação (“Oferta Restrita”), nos termos da Instrução CVM nº 476, de 19 de janeiro de 2009, conforme alterada (“Instrução CVM 476”).",
json_schema='{"$schema":"http://json-schema.org/draft-04/schema#","type":"object","properties":{"fund":{"type":"object","properties":{"name":{"type":"string"},"cnpj":{"type":"string"},"shares":{"type":"array","items":[{"type":"object","properties":{"name":{"type":"string"},"quantity":{"type":"object","properties":{"min":{"type":"integer"},"max":{"type":"integer"}},"required":["min","max"]},"valuePerShare":{"type":"integer"}},"required":["name","quantity","valuePerShare"]},{"type":"object","properties":{"name":{"type":"string"},"quantity":{"type":"object","properties":{"min":{"type":"integer"},"max":{"type":"integer"}},"required":["min","max"]},"valuePerShare":{"type":"integer"}},"required":["name","quantity","valuePerShare"]},{"type":"object","properties":{"name":{"type":"string"},"quantity":{"type":"integer"},"valuePerShare":{"type":"integer"}},"required":["name","quantity","valuePerShare"]}]}},"required":["name","cnpj","shares"]},"administrator":{"type":"array","items":[{"type":"object","properties":{"name":{"type":"string"},"cnpj":{"type":"string"},"address":{"type":"object","properties":{"street":{"type":"string"},"number":{"type":"string"},"complement":{"type":"string"},"neighborhood":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"zipcode":{"type":"string"}},"required":["street","number","complement","neighborhood","city","state","zipcode"]}},"required":["name","cnpj","address"]}]}},"required":["fund","administrator"]}',
output='{"fund":{"name":"AUTO LOANS FUNDO DE INVESTIMENTO EM DIREITOS CREDITÓRIOS","cnpj":"40.794.358/0001-58","shares":[ {"name":"Cotas Seniores","quantity":{"min":35000000,"max":70000000},"valuePerShare":1},{"name":"Cotas Subordinadas Mezanino","quantity":{"min":7500000,"max":15000000},"valuePerShare":1},{"name":"Cotas Subordinadas Júnior","quantity":15000000,"valuePerShare":1}]},"administrator":[ {"name":"VÓRTX DISTRIBUIDORA DE TÍTULOS E VALORES MOBILIÁRIOS","cnpj":"22.610.500/0001-88","address":{"street":"Rua Gilberto Sabino","number":"215","complement":"4º andar","neighborhood":"Pinheiros","city":"São Paulo","state":"São Paulo","zipcode":"05425-020"}}]}'
)
]
class Compiled(Module):
def __init__(self, model):
self.model = ChainOfThought(model)
def forward(self, **kwargs):
return self.model(**kwargs)
def few_shot_compile(input, dataset=None, metric=_validate):
teleprompter = BootstrapFewShot(
metric=metric,
max_rounds=8,
max_bootstrapped_demos=3,
max_labeled_demos=3,
)
return teleprompter.compile(Compiled(input), trainset=dataset)
def extract():
return few_shot_compile(
Extract,
dataset=examples,
metric=lambda a, b, _: evaluate.answer_exact_match_str(a.output, [b.output]),
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment