Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/update llm schema #45

Merged
merged 3 commits into from
Jul 20, 2023
Merged

Feat/update llm schema #45

merged 3 commits into from
Jul 20, 2023

Conversation

igoromote
Copy link
Contributor

☕ Purpose

A brief summary about the purpose of this PR.

🧐 Checklist

  • A feature that will work with this PR
  • A feature that I'm still working on

🐞 Testing

A brief description about how the reviewer can test my PR.

# don't forget to insert cli commands

🍩 Further details

Anything that the reviewer should know before approving it.

🔗 Related PRs

This PR is related to some other PRs in different services, they are:

createdat :: timestamp as created_at,
referenceid as reference_id,
referenceid :: uuid as reference_id,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

É uma convenção colocar o ID do KR nesse campo na sumarização, mas não é uma constraint. Ou seja, pode ser que outros casos de uso do LLM (ou até esse mesmo caso) no futuro salvem dados em outros formatos aqui. Recomendo manter o referenceId :: text.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Entendi, mas me parece estranho não termos uma convenção de usar a mesma tecnologia para criação de id's.
Vou alterar aqui para ser o mais genérico possível.
Depois vou estudar um pouco boas práticas, pq quando esse momento chegar nessa tabela (de termos id's que não são uuid), minha vontade é separar nas dimensions e refazer o casting para uuid lá

Exemplo:
action: X1, entity: Y1, id: uuid -> criar uma dim__llm_actionX1_entityY1 -> fazer casting com uuid
action: X2, entity: Y2, id: mongoid -> criar uma dim__llm_actionX2_entityY2 -> fazer casting para text

Só que não sei se é best practice, mas funciona.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

É que este é um caso de ID diferente de uma chave primária, mas também é normal existirem diferentes tipos de ID em uma mesma aplicação, porque esse formato também atende a um caso de uso (ex: UUID vs Snowflake tem aplicações diferentes).

De resto, o que você propôs parece fazer sentido sim e é mais ou menos a ideia que eu tinha para lidar com estes casos. Dentro do domínio de OpenAiCompletion, o referenceId é genérico por design. Porém, dentro de cada subdomínio ele segue uma convenção específica, então é perfeitamente válido tratar isso para análises que contemplem o escopo action-entity. Tudo é uma questão de caso de uso e, para cada um deles, podemos criar as abstrações que precisarmos.

),

final as (
select
SPLIT_PART(id, '.', 3) :: text as id,
input,
SPLIT_PART(id, '.', 3) :: uuid as id,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Não sei se eu entendi o motivo de você estar fazendo isso, mas acho que rolou uma confusão sobre o formato do id. As duas primeiras partes dele são a action e a entity, mas a terceira não é um UUID. Na verdade, é um hash calculado a partir do input/prompt da completion em questão, e ele é construído dessa forma para garantir idempotência de uma forma fácil e rápida.

Além disso, recentemente eu adicionei a versão do prompt no final usando o formato @<version>.<patch>, então talvez quebre essa função. Fiz isso para garantir que uma completion vai ser gerada novamente quando uma nova versão do prompt é liberada.

Resumindo, o formato do id é:

id = `${action}.${entity}.${objectHash(input)}@${promptVersion}`

// Exemplo
id = '[email protected]'

Sendo assim, recomendo manter o mapeamento dessa coluna "as is" (em text e sem split), pois não vai ter nenhuma informação muito útil que pode ser extraída dele a não ser o id em si.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mas, se realmente for necessário ter IDs em formato UUID, recomendo que você faça uma conversão utilizando o UUID v5 e um namespace fixo qualquer (ex: 00000000-0000-0000-0000-000000000000):

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it, vlw pela explicação!

@igoromote igoromote merged commit 0f36c3a into main Jul 20, 2023
@igoromote igoromote deleted the feat/update_llm_schema branch July 20, 2023 14:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants