File size: 2,936 Bytes
90236d7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from pathlib import Path
from playwright.sync_api import sync_playwright
import json
with sync_playwright() as p:
 browser=p.chromium.launch(args=['--no-sandbox'])
 page=browser.new_page(ignore_https_errors=True);errors=[];captured=[]
 page.on('pageerror',lambda e:errors.append(str(e)))
 def reply(route):
  captured.append(route.request.post_data_json)
  payload={'choices':[{'index':0,'delta':{'content':'A saved answer.'},'finish_reason':None}]}
  route.fulfill(status=200,content_type='text/event-stream',body='data: '+json.dumps(payload)+'\n\ndata: [DONE]\n\n')
 page.route('**/v1/chat/completions',reply)
 page.goto('https://see7-astheralplus.hf.space/',wait_until='networkidle',timeout=30000)
 page.get_by_role('button',name='Projects',exact=True).click()
 page.locator('#pp-new').click();page.locator('#pp-name').fill('Physics');page.locator('#pp-instructions').fill('Use SI units.');page.locator('#pp-save').click()
 page.locator('#pp-files').set_input_files({'name':'units.txt','mimeType':'text/plain','buffer':b'The metre is the SI unit of length.'})
 page.wait_for_timeout(250);page.locator('#pp-close').click()
 page.locator('textarea').filter(visible=True).first.fill('Explain distance.')
 page.get_by_role('button',name='Send',exact=True).click();page.wait_for_timeout(1000)
 state=json.loads(page.evaluate("localStorage.getItem('astheralplus.projects.v1')"))
 a=state['projects'][0];assert len(a['files'])==1 and len(a['chats'])==1
 assert a['chats'][0]['messages'][-1]['content']=='A saved answer.'
 assert 'Use SI units.' in captured[-1]['messages'][0]['content'] and 'units.txt' in captured[-1]['messages'][0]['content']
 print('PROJECT_CHAT_PATH',a['chats'][0]['path'],flush=True)
 page.get_by_role('button',name='Projects · Physics',exact=True).click()
 with page.expect_download() as info:page.locator('#pp-export').click()
 assert info.value.suggested_filename=='Physics.json'
 page.locator('#pp-new').click();page.locator('#pp-name').fill('Writing');page.locator('#pp-save').click();page.locator('#pp-close').click()
 page.get_by_label('Response mode',exact=True).select_option('Thinking')
 page.locator('textarea').filter(visible=True).first.fill('Write a short sentence.')
 page.get_by_role('button',name='Send',exact=True).click();page.wait_for_timeout(800)
 data=captured[-1];assert data['model']=='SEE7/AstheralPlus' and data['chat_template_kwargs']['enable_thinking'] is True
 assert 'SI units' not in json.dumps(data['messages']) and 'Explain distance' not in json.dumps(data['messages'])
 page.reload(wait_until='networkidle');assert page.get_by_label('Response mode',exact=True).input_value()=='Thinking'
 assert page.get_by_role('button',name='Projects · Writing',exact=True).count()==1
 print('PASS projects, reference files, instructions, saved chats, export, project isolation, mode toggle and reload persistence',flush=True)
 print('ERRORS',errors,flush=True);assert not errors
 browser.close()