bugfix
This commit is contained in:
parent
335653a23b
commit
2bdd7150f3
@ -2,7 +2,7 @@ import aiohttp
|
|||||||
from aiohttp import web, BasicAuth
|
from aiohttp import web, BasicAuth
|
||||||
from aiohttp import client
|
from aiohttp import client
|
||||||
from appPublic.dictObject import DictObject
|
from appPublic.dictObject import DictObject
|
||||||
from .llm_client import LlmProxy
|
from .llm_client import StreamLlmProxy, AsyncLlmProxy, SyncLlmProxy
|
||||||
from .baseProcessor import *
|
from .baseProcessor import *
|
||||||
|
|
||||||
class LlmProcessor(BaseProcessor):
|
class LlmProcessor(BaseProcessor):
|
||||||
@ -24,9 +24,58 @@ class LlmProcessor(BaseProcessor):
|
|||||||
async def datahandle(self,request):
|
async def datahandle(self,request):
|
||||||
chunk_size = 40960
|
chunk_size = 40960
|
||||||
d = await self.path_call(request)
|
d = await self.path_call(request)
|
||||||
llm = LlmProxy(self, d)
|
llm = StreamLlmProxy(self, d)
|
||||||
self.retResponse = await llm(request, self.run_ns.params_kw)
|
self.retResponse = await llm(request, self.run_ns.params_kw)
|
||||||
|
|
||||||
def setheaders(self):
|
def setheaders(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class LlmSProcessor(BaseProcessor):
|
||||||
|
@classmethod
|
||||||
|
def isMe(self,name):
|
||||||
|
return name=='llms'
|
||||||
|
|
||||||
|
async def path_call(self, request, params={}):
|
||||||
|
await self.set_run_env(request)
|
||||||
|
path = self.path
|
||||||
|
url = self.resource.entireUrl(request, path)
|
||||||
|
ns = self.run_ns
|
||||||
|
ns.update(params)
|
||||||
|
te = self.run_ns['tmpl_engine']
|
||||||
|
txt = await te.render(url,**ns)
|
||||||
|
data = json.loads(txt)
|
||||||
|
return DictObject(**data)
|
||||||
|
|
||||||
|
async def datahandle(self,request):
|
||||||
|
chunk_size = 40960
|
||||||
|
d = await self.path_call(request)
|
||||||
|
llm = SyncLlmProxy(self, d)
|
||||||
|
self.content = await llm(request, self.run_ns.params_kw)
|
||||||
|
|
||||||
|
def setheaders(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class LlmAProcessor(BaseProcessor):
|
||||||
|
@classmethod
|
||||||
|
def isMe(self,name):
|
||||||
|
return name=='llma'
|
||||||
|
|
||||||
|
async def path_call(self, request, params={}):
|
||||||
|
await self.set_run_env(request)
|
||||||
|
path = self.path
|
||||||
|
url = self.resource.entireUrl(request, path)
|
||||||
|
ns = self.run_ns
|
||||||
|
ns.update(params)
|
||||||
|
te = self.run_ns['tmpl_engine']
|
||||||
|
txt = await te.render(url,**ns)
|
||||||
|
data = json.loads(txt)
|
||||||
|
return DictObject(**data)
|
||||||
|
|
||||||
|
async def datahandle(self,request):
|
||||||
|
chunk_size = 40960
|
||||||
|
d = await self.path_call(request)
|
||||||
|
llm = AsyncLlmProxy(self, d)
|
||||||
|
self.retResponse = await llm(request, self.run_ns.params_kw)
|
||||||
|
|
||||||
|
def setheaders(self):
|
||||||
|
pass
|
||||||
|
@ -11,7 +11,7 @@ def encode_imagefile(fn):
|
|||||||
with open(fn, 'rb') as f:
|
with open(fn, 'rb') as f:
|
||||||
return base64.b64encode(f.read()).decode('utf-8')
|
return base64.b64encode(f.read()).decode('utf-8')
|
||||||
|
|
||||||
class LlmProxy:
|
class StreamLlmProxy:
|
||||||
def __init__(self, processor, desc):
|
def __init__(self, processor, desc):
|
||||||
assert desc.name
|
assert desc.name
|
||||||
self.name = desc.name
|
self.name = desc.name
|
||||||
@ -38,6 +38,8 @@ class LlmProxy:
|
|||||||
'==':eq,
|
'==':eq,
|
||||||
'!=':ne
|
'!=':ne
|
||||||
}
|
}
|
||||||
|
if '[DONE]' in ll:
|
||||||
|
return
|
||||||
try:
|
try:
|
||||||
print('write_chunk(),l=', ll)
|
print('write_chunk(),l=', ll)
|
||||||
l = self.line_chunk_match(ll)
|
l = self.line_chunk_match(ll)
|
||||||
@ -182,3 +184,103 @@ class LlmProxy:
|
|||||||
s1 = self.ac.convert(dic, mydata)
|
s1 = self.ac.convert(dic, mydata)
|
||||||
return s1
|
return s1
|
||||||
|
|
||||||
|
class SyncLlmProxy(StreamLlmProxy):
|
||||||
|
async def __call__(self, request, params):
|
||||||
|
self.user = await self.processor.run_ns.get_user()
|
||||||
|
mapi = params.mapi
|
||||||
|
if not self.desc[mapi]:
|
||||||
|
return {
|
||||||
|
"status":"Error",
|
||||||
|
"message":f'{mapi} not defined'
|
||||||
|
}
|
||||||
|
d = self.desc[mapi]
|
||||||
|
self.api = d
|
||||||
|
if self.api.need_auth and self.auth_api:
|
||||||
|
await self.do_auth(request)
|
||||||
|
else:
|
||||||
|
self.data = await self.get_apikey(self.name)
|
||||||
|
|
||||||
|
assert d.get('url')
|
||||||
|
method = d.get('method', 'POST')
|
||||||
|
headers = {}
|
||||||
|
for h in d.get('headers',{}):
|
||||||
|
headers[h.get('name')] = h.get('value')
|
||||||
|
mydata = {}
|
||||||
|
for p in d.get('data', {}):
|
||||||
|
mydata[p.get('name')] = p.get('value')
|
||||||
|
myparams = {}
|
||||||
|
for p in d.get('params', {}):
|
||||||
|
myparams[p.get('name')] = p.get('value')
|
||||||
|
url = d.get('url')
|
||||||
|
_params = self.datalize(myparams, params)
|
||||||
|
_headers = self.datalize(headers, params)
|
||||||
|
_data = self.datalize(mydata, params)
|
||||||
|
response_type = RESPONSE_JSON
|
||||||
|
hc = HttpClient()
|
||||||
|
print(f'{url=},{method=},{_params=},{_data=},{_headers=}')
|
||||||
|
resp_data = await hc.request(url, method, response_type=response_type,
|
||||||
|
params=_params,
|
||||||
|
data=None if _data == {} else json.dumps(_data),
|
||||||
|
headers=_headers)
|
||||||
|
resp_data = DictObject(resp_data)
|
||||||
|
if resp_data is None:
|
||||||
|
return {
|
||||||
|
"status":"Error",
|
||||||
|
"message":f'{mapi} not defined'
|
||||||
|
}
|
||||||
|
return self.convert_resp(resp_data)
|
||||||
|
|
||||||
|
def convert_resp(self, resp):
|
||||||
|
j = {}
|
||||||
|
for r in self.api.resp or []:
|
||||||
|
j[r.name] = resp.get_data_by_keys(r.value);
|
||||||
|
return j
|
||||||
|
|
||||||
|
|
||||||
|
class AsyncLlmProxy(StreamLlmProxy):
|
||||||
|
pass
|
||||||
|
class AsyncLlmProxy:
|
||||||
|
async def __call__(self, request, params):
|
||||||
|
self.user = await self.processor.run_ns.get_user()
|
||||||
|
mapi = params.mapi
|
||||||
|
stream = params.stream
|
||||||
|
self.resp = web.StreamResponse()
|
||||||
|
await self.resp.prepare(request)
|
||||||
|
if stream is None:
|
||||||
|
stream = True
|
||||||
|
self.remain_str = ''
|
||||||
|
if not self.desc[mapi]:
|
||||||
|
raise Exception(f'{mapi} not defined')
|
||||||
|
d = self.desc[mapi]
|
||||||
|
self.api = d
|
||||||
|
self.chunk_match = d.chunk_match
|
||||||
|
if self.api.need_auth and self.auth_api:
|
||||||
|
await self.do_auth(request)
|
||||||
|
else:
|
||||||
|
self.data = await self.get_apikey(self.name)
|
||||||
|
|
||||||
|
assert d.get('url')
|
||||||
|
method = d.get('method', 'POST')
|
||||||
|
headers = {}
|
||||||
|
for h in d.get('headers',{}):
|
||||||
|
headers[h.get('name')] = h.get('value')
|
||||||
|
mydata = {}
|
||||||
|
for p in d.get('data', {}):
|
||||||
|
mydata[p.get('name')] = p.get('value')
|
||||||
|
myparams = {}
|
||||||
|
for p in d.get('params', {}):
|
||||||
|
myparams[p.get('name')] = p.get('value')
|
||||||
|
url = d.get('url')
|
||||||
|
_params = self.datalize(myparams, params)
|
||||||
|
_headers = self.datalize(headers, params)
|
||||||
|
_data = self.datalize(mydata, params)
|
||||||
|
response_type = RESPONSE_JSON
|
||||||
|
hc = HttpClient()
|
||||||
|
print(f'{url=},{method=},{_params=},{_data=},{_headers=}')
|
||||||
|
resp_data = await hc.request(url, method, response_type=response_type,
|
||||||
|
params=_params,
|
||||||
|
data=None if _data == {} else json.dumps(_data),
|
||||||
|
headers=_headers)
|
||||||
|
if self.remain_str != '':
|
||||||
|
await self.write_chunk(self.remain_str)
|
||||||
|
return self.resp
|
||||||
|
@ -44,7 +44,7 @@ from .baseProcessor import getProcessor, BricksUIProcessor, TemplateProcessor
|
|||||||
from .baseProcessor import PythonScriptProcessor, MarkdownProcessor
|
from .baseProcessor import PythonScriptProcessor, MarkdownProcessor
|
||||||
|
|
||||||
from .xlsxdsProcessor import XLSXDataSourceProcessor
|
from .xlsxdsProcessor import XLSXDataSourceProcessor
|
||||||
from .llmProcessor import LlmProcessor
|
from .llmProcessor import LlmProcessor, LlmSProcessor, LlmAProcessor
|
||||||
from .websocketProcessor import WebsocketProcessor, XtermProcessor
|
from .websocketProcessor import WebsocketProcessor, XtermProcessor
|
||||||
from .sqldsProcessor import SQLDataSourceProcessor
|
from .sqldsProcessor import SQLDataSourceProcessor
|
||||||
from .functionProcessor import FunctionProcessor
|
from .functionProcessor import FunctionProcessor
|
||||||
|
Loading…
Reference in New Issue
Block a user