needle / tests /test_native_schema.py
Leon4gr45's picture
Upload folder using huggingface_hub (part 2)
25a2c1c verified
Raw History Blame Contribute Delete
2.75 kB
import copy
from hypothesis import given,strategies as st
from jsonschema import Draft202012Validator
from native_schema import inference_tools
SCHEMA={'title':'Arguments','type':'object','properties':{'path':{'title':'Path','type':'string','minLength':2},'title':{'title':'Heading','type':'string','enum':['allowed']},'data':{'const':{'title':'literal data'}}},'required':['path','title'],'additionalProperties':False}
TOOL={'name':'read_file','description':'Read a source file','parameters':SCHEMA}
def test_schema_annotations_are_private_and_literal_title_property_survives():
original=copy.deepcopy(TOOL);view=inference_tools([TOOL])[0]
assert TOOL==original and view['description']==TOOL['description']
assert 'title' not in view['parameters']
assert 'title' in view['parameters']['properties']
assert view['parameters']['properties']['title']=={'type':'string','enum':['allowed']}
assert view['parameters']['properties']['data']['const']=={'title':'literal data'}
assert view['parameters']['required']==['path','title'] and view['parameters']['additionalProperties'] is False
@given(st.dictionaries(st.sampled_from(['path','title','data','extra']),st.one_of(st.text(max_size=10),st.integers(),st.just({'title':'literal data'})),max_size=4))
def test_annotation_projection_preserves_original_assertions(instance):
view=inference_tools([TOOL])[0]['parameters']
assert Draft202012Validator(SCHEMA).is_valid(instance)==Draft202012Validator(view).is_valid(instance)
def test_nested_schema_locations_preserve_instance_data_and_assertions():
schema={'allOf':[{'title':'Branch','type':'array','items':{'title':'Item','type':'string','pattern':'^a'}}],'$defs':{'title':{'title':'Definition','const':{'title':'keep'}}},'if':{'title':'Condition','type':'object'},'then':{'properties':{'title':{'title':'Label','type':'string'}}},'examples':[{'title':'keep'}]}
result=inference_tools([{'name':'x','parameters':schema}])[0]['parameters']
assert result['allOf'][0]=={'type':'array','items':{'type':'string','pattern':'^a'}}
assert result['$defs']['title']=={'const':{'title':'keep'}}
assert result['then']['properties']['title']=={'type':'string'}
assert result['examples']==[{'title':'keep'}]
def test_actual_sdk_construction_uses_private_schema(monkeypatch):
import gateway
captured={}
def construct(**kwargs):captured.update(kwargs);return captured
monkeypatch.setattr(gateway.needle,'Needle',construct)
result=gateway._build_agent([TOOL],'system')
assert result['generation']==3 and result['system']=='system'
assert 'title' not in result['tools'][0]['parameters']['properties']['path']
assert TOOL['parameters']['properties']['path']['title']=='Path'