2023-08-17 12:38:49 +00:00
import pytest
2024-03-21 21:21:03 +00:00
import base64
2023-08-17 12:38:49 +00:00
@pytest.fixture ( scope = " module " )
def idefics_handle ( launcher ) :
2023-12-11 13:49:52 +00:00
with launcher (
" HuggingFaceM4/idefics-9b-instruct " , num_shard = 2 , dtype = " float16 "
) as handle :
2023-08-17 12:38:49 +00:00
yield handle
@pytest.fixture ( scope = " module " )
async def idefics ( idefics_handle ) :
await idefics_handle . health ( 300 )
return idefics_handle . client
2024-03-21 21:21:03 +00:00
# TODO fix the server parsser to count inline image tokens correctly
def get_chicken ( ) :
with open ( " integration-tests/images/chicken_on_money.png " , " rb " ) as image_file :
encoded_string = base64 . b64encode ( image_file . read ( ) )
return f " data:image/png;base64, { encoded_string } "
2023-08-17 12:38:49 +00:00
@pytest.mark.asyncio
async def test_idefics ( idefics , response_snapshot ) :
response = await idefics . generate (
2024-03-21 21:21:03 +00:00
" User:Can you tell me a very short story based on the image? " ,
2023-08-17 12:38:49 +00:00
max_new_tokens = 10 ,
decoder_input_details = True ,
)
assert response . details . generated_tokens == 10
assert response == response_snapshot
@pytest.mark.asyncio
async def test_idefics_load ( idefics , generate_load , response_snapshot ) :
responses = await generate_load (
idefics ,
2024-03-21 21:21:03 +00:00
" User:Can you tell me a very short story based on the image? " ,
2023-08-17 12:38:49 +00:00
max_new_tokens = 10 ,
n = 4 ,
)
generated_texts = [ r . generated_text for r in responses ]
assert len ( generated_texts ) == 4
assert generated_texts , all (
[ text == generated_texts [ 0 ] for text in generated_texts ]
)
assert responses == response_snapshot