mirror of
https://github.com/hoshikawa2/agent_platform_oci.git
synced 2026-11-06 03:14:12 +00:00
new feature: LOCALE pt-BR/en
This commit is contained in:
@@ -746,32 +746,41 @@ async def test_correction_of_missing_numeric_value_does_not_reopen_resolved_text
|
||||
assert out == {"valor": 19.99}
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_reconciler_exposes_schema_driven_field_evidence_views_for_missing_fields():
|
||||
async def test_reconciler_receives_schema_context_and_preserves_known_values():
|
||||
# Histórico: 1711575 (2026-09-07) removeu field_evidence_views e anchor_matches.
|
||||
# O teste anterior verificava a montagem interna de um prompt descontinuado.
|
||||
# Validamos o contrato: schema/contexto chegam ao provedor, o campo resolvido
|
||||
# é aceito e preserve mantém o valor conhecido, mesmo se o modelo sugerir outro.
|
||||
class _LLM:
|
||||
def __init__(self):
|
||||
self.prompt = ""
|
||||
|
||||
async def ainvoke(self, messages, **kwargs):
|
||||
self.prompt = messages[0]["content"]
|
||||
return {"content": '{"fields":{"subject":{"decision":"resolved","value":"Produto A","source":"history:1"},"valor":{"decision":"preserve","value":14.99,"source":"state"}}}'}
|
||||
return {"content": json.dumps({"fields": {
|
||||
"subject": {"decision": "resolved", "value": "Produto A", "source": "history:1"},
|
||||
"valor": {"decision": "preserve", "value": 999.0, "source": "state"},
|
||||
}})}
|
||||
|
||||
from agent_framework.runtime.transaction_parameters import reconcile_transaction_parameters
|
||||
llm = _LLM()
|
||||
schema = {
|
||||
"subject": {"type": "string", "description": "referência concreta identificável"},
|
||||
"valor": {"type": "number", "description": "quantia associada"},
|
||||
}
|
||||
current_text = "é a de quatorze e noventa e nove"
|
||||
context = "history:1: assistant: Produto A no atributo 14,99. Produto B no atributo 10,00."
|
||||
result = await reconcile_transaction_parameters(
|
||||
llm,
|
||||
text="é a de quatorze e noventa e nove",
|
||||
tool_name="acao_generica",
|
||||
parameter_names=["subject", "valor"],
|
||||
known_arguments={"valor": 14.99},
|
||||
parameter_schema={
|
||||
"subject": {"type": "string", "description": "referência concreta identificável"},
|
||||
"valor": {"type": "number", "description": "quantia associada"},
|
||||
},
|
||||
conversational_context=(
|
||||
"priority_3_previous_assistant_tool_or_evidence_context:\n"
|
||||
"history:1: assistant: * Produto A no atributo 14,99. * Produto B no atributo 10,00."
|
||||
),
|
||||
llm, text=current_text, tool_name="acao_generica",
|
||||
parameter_names=["subject", "valor"], known_arguments={"valor": 14.99},
|
||||
parameter_schema=schema, conversational_context=context,
|
||||
)
|
||||
assert result["values"]["subject"] == "Produto A"
|
||||
assert "field_evidence_views:" in llm.prompt
|
||||
assert '"subject"' in llm.prompt
|
||||
assert '"anchor_matches"' in llm.prompt
|
||||
assert current_text in llm.prompt
|
||||
assert context in llm.prompt
|
||||
for field, definition in schema.items():
|
||||
assert json.dumps(field) in llm.prompt
|
||||
assert definition["description"] in llm.prompt
|
||||
assert result["values"] == {"subject": "Produto A", "valor": 14.99}
|
||||
assert result["decisions"] == {"subject": "resolved", "valor": "preserve"}
|
||||
assert result["provenance"] == {"subject": "history:1", "valor": "state"}
|
||||
assert result["clear_fields"] == []
|
||||
|
||||
Reference in New Issue
Block a user