master
yumoqing 2024-04-11 09:57:54 +08:00
parent 5f00823b3c
commit 1b53d9e81d
3 changed files with 42 additions and 43 deletions

View File

@ -97,13 +97,19 @@ class BaseProcessor(AppLogger):
if self.retResponse is not None:
self.set_response_headers(self.retResponse)
return self.retResponse
elif type(self.content) == type({}) :
elif isinstance(self.content, DictObject):
self.content = json.dumps(self.content, indent=4)
jsonflg = True
elif type(self.content) == type([]):
elif isinstance(self.content, dict):
self.content = json.dumps(self.content, indent=4)
jsonflg = True
elif type(self.content) == type(b''):
elif isinstance(self.content, list):
self.content = json.dumps(self.content, indent=4)
jsonflg = True
elif isinstance(self.content, tuple):
self.content = json.dumps(self.content, indent=4)
jsonflg = True
elif isinstance(self.content, bytes):
self.headers['Access-Control-Expose-Headers'] = 'Set-Cookie'
self.headers['Content-Length'] = str(len(self.content))
resp = Response(body=self.content,headers=self.headers)

View File

@ -13,6 +13,7 @@ from openpyxl import Workbook
from tempfile import mktemp
from appPublic.jsonConfig import getConfig
from appPublic.dictObject import DictObject
from appPublic.Singleton import GlobalEnv
from appPublic.argsConvert import ArgsConvert
from appPublic.timeUtils import str2Date,str2Datetime,curDatetime,getCurrentTimeStamp,curDateString, curTimeString
@ -144,19 +145,12 @@ def file_download(request,path,name,coding='utf8'):
def initEnv():
pool = DBPools()
g = ServerEnv()
set_builtins()
g.configValue = configValue
g.visualcoding = visualcoding
g.uriop = URIOp
g.isNone = isNone
g.len = len
g.print = print
g.json = json
g.Exception = Exception
g.int = int
g.str = str
g.float = float
g.complex = complex
g.type = type
g.ArgsConvert = ArgsConvert
g.time = time
g.curDateString = curDateString
@ -191,7 +185,7 @@ def initEnv():
g.current_fileno = current_fileno
g.get_config_value = get_config_value
g.get_definition = get_definition
set_builtins()
g.DictObject = DictObject
def set_builtins():
all_builtins = [ i for i in dir(builtins) if not i.startswith('_')]
@ -199,4 +193,3 @@ def set_builtins():
gg = globals()
for l in all_builtins:
exec(f'g["{l}"] = {l}',{'g':g})
print(f'{g.sorted=}, {sorted=}, globalEnv.py')

View File

@ -24,22 +24,18 @@ class LlmProxy:
return l
async def write_chunk(self, l):
l = self.line_chunk_match(l)
d = DictObject(** json.loads(l))
content = d.get_data_by_keys(self.api.content_keys)
finished = d.get_data_by_keys(self.api.finished_keys)
tokens = {}
if finished:
tokens = d.get_data_by_keys(self.api.tokens_keys)
try:
l = self.line_chunk_match(l)
d = DictObject(** json.loads(l))
j = {}
for r in self.api.resp or []:
j[r.name] = d.get_data_by_keys(r.value);
j = {
'content':content,
'finish':False,
'token':tokens
}
jstr = json.dumps(j) + '\n'
bin = jstr.encode('utf-8')
await self.resp.write(bin)
jstr = json.dumps(j) + '\n'
bin = jstr.encode('utf-8')
await self.resp.write(bin)
except Exception as e:
print(f'Write_chunk("{l}") errpr:{e=}')
async def stream_handle(self, chunk):
chunk = chunk.decode('utf-8')
@ -53,22 +49,21 @@ class LlmProxy:
continue
await self.write_chunk(l)
async def get_apikey(self, apiname, user):
async def get_apikey(self, apiname):
f = self.processor.run_ns.get_llm_user_apikey
if f:
# return a DictObject instance
return await f(apiname, user)
return await f(apiname, self.user)
raise Exception('get_llm_user_apikey() function not found in ServerEnv')
async def do_auth(self, request):
d = self.desc.auth
user = await self.processor.run_ns.get_user()
self.data = self.get_data(self.name, user)
self.data = self.get_data(self.name)
if self.data.authed:
return
self.data = await self.get_apikey(self.name, user)
self.data = await self.get_apikey(self.name)
if self.data is None:
raise Exception(f'user({user}) do not has a apikey for {self.name}')
raise Exception(f'user({self.user}) do not has a apikey for {self.name}')
method = d.get('method', 'POST')
headers = {}
for h in d.get('headers',{}):
@ -93,24 +88,25 @@ class LlmProxy:
for sd in d.set_data:
self.data[sd.name] = resp_data.get_data_by_keys(sd.field)
self.data.authed = True
self.set_data(self.name, user, self.data)
self.set_data(self.name, self.data)
def data_key(self, apiname, user):
if user is None:
user = 'anoumous'
return apiname + '_a_' + user
def data_key(self, apiname):
if self.user is None:
self.user = 'anonymous'
return apiname + '_a_' + self.user
def set_data(self, apiname, user, data):
def set_data(self, apiname, data):
request = self.processor.run_ns.request
app = request.app
app.set_data(self.data_key(apiname, user), data)
app.set_data(self.data_key(apiname), data)
def get_data(self, apiname, user):
def get_data(self, apiname):
request = self.processor.run_ns.request
app = request.app
return app.get_data(self.data_key(apiname, user))
return app.get_data(self.data_key(apiname))
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()
@ -125,6 +121,9 @@ class LlmProxy:
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 = {}
@ -137,6 +136,7 @@ class LlmProxy:
for p in d.get('params', {}):
myparams[p.get('name')] = p.get('value')
url = d.get('url')
print(f'show me self.data={self.data}')
_params = self.datalize(myparams, params)
_headers = self.datalize(headers, params)
_data = self.datalize(mydata, params)