initial commit diff --git a/lm/__main__.py b/lm/__main__.py new file mode 100644 --- /dev/null +++ b/lm/__main__.py @@ -0,0 +1,44 @@ +from .lm_spellbook import spellbook + +import argparse +import asyncio +import datetime +import json +import os +import sys + +async def main(): + timestamp = datetime.datetime.now().isoformat() + parser = argparse.ArgumentParser() + parser.add_argument('-l', '--logfile', type=argparse.FileType('w'), default=f'{timestamp}.json', help='Log file') + parser.add_argument('-o', '--output', type=argparse.FileType('w'), default=sys.stdout, help='Output file') + parser.add_argument('input_data', nargs='*', help='Input data or filename') + args = parser.parse_args() + + if len(args.input_data) == 1 and os.path.exists(args.input_data[0]): + with open(args.input_data[1], 'r') as f: + input_data = f.read() + log_input(input_data, args.output) + elif args.input_data: + input_data = ' '.join(args.input_data) + else: + input_data = sys.stdin.read() + + api = spellbook( + api_key = 'clfcfnj7m003xti1a7hxt1739', + app_id = 'sm43s5r' + ) + async with api: + response = await api(input_data) + + json.dump({ + 'time': timestamp, + 'url': api.url, + 'input': input_data, + 'output': response, + }, args.logfile) + + args.output.write(response) + +if __name__ == "__main__": + asyncio.run(main()) factored logging into log_jsonfiles.py diff --git a/lm/__main__.py b/lm/__main__.py --- a/lm/__main__.py +++ b/lm/__main__.py @@ -1,4 +1,5 @@ from .lm_spellbook import spellbook +from .log_jsonfiles import jsonfiles import argparse import asyncio @@ -10,7 +11,6 @@ import sys async def main(): timestamp = datetime.datetime.now().isoformat() parser = argparse.ArgumentParser() - parser.add_argument('-l', '--logfile', type=argparse.FileType('w'), default=f'{timestamp}.json', help='Log file') parser.add_argument('-o', '--output', type=argparse.FileType('w'), default=sys.stdout, help='Output file') parser.add_argument('input_data', nargs='*', help='Input data or filename') args = parser.parse_args() @@ -28,15 +28,16 @@ async def main(): api_key = 'clfcfnj7m003xti1a7hxt1739', app_id = 'sm43s5r' ) - async with api: + log = jsonfiles(prefix = 'gpt4-') + + async with api, log: response = await api(input_data) - - json.dump({ - 'time': timestamp, - 'url': api.url, - 'input': input_data, - 'output': response, - }, args.logfile) + await log( + time = timestamp, + url = api.url, + input = input_data, + output = response, + ) args.output.write(response) install console script; fix duplicate entry diff --git a/lm/__main__.py b/lm/__main__.py --- a/lm/__main__.py +++ b/lm/__main__.py @@ -8,7 +8,7 @@ import json import os import sys -async def main(): +async def amain(): timestamp = datetime.datetime.now().isoformat() parser = argparse.ArgumentParser() parser.add_argument('-o', '--output', type=argparse.FileType('w'), default=sys.stdout, help='Output file') @@ -41,5 +41,8 @@ async def main(): args.output.write(response) +def main(): + asyncio.run(amain()) + if __name__ == "__main__": - asyncio.run(main()) + main() lm/lm and lm/log subpackages diff --git a/lm/__main__.py b/lm/__main__.py --- a/lm/__main__.py +++ b/lm/__main__.py @@ -1,5 +1,5 @@ -from .lm_spellbook import spellbook -from .log_jsonfiles import jsonfiles +from .lm.spellbook import spellbook +from .log.jsonfiles import jsonfiles import argparse import asyncio added openai api, untested diff --git a/lm/__main__.py b/lm/__main__.py --- a/lm/__main__.py +++ b/lm/__main__.py @@ -1,4 +1,5 @@ from .lm.spellbook import spellbook +from .lm.openai import openai from .log.jsonfiles import jsonfiles import argparse @@ -24,17 +25,14 @@ async def amain(): else: input_data = sys.stdin.read() - api = spellbook( - api_key = 'clfcfnj7m003xti1a7hxt1739', - app_id = 'sm43s5r' - ) + api = spellbook() log = jsonfiles(prefix = 'gpt4-') async with api, log: response = await api(input_data) await log( time = timestamp, - url = api.url, + **api.metadata, input = input_data, output = response, ) read content of filename parameters diff --git a/lm/__main__.py b/lm/__main__.py --- a/lm/__main__.py +++ b/lm/__main__.py @@ -6,6 +6,7 @@ import argparse import asyncio import datetime import json +import logging import os import sys @@ -16,12 +17,21 @@ async def amain(): parser.add_argument('input_data', nargs='*', help='Input data or filename') args = parser.parse_args() - if len(args.input_data) == 1 and os.path.exists(args.input_data[0]): - with open(args.input_data[1], 'r') as f: - input_data = f.read() - log_input(input_data, args.output) - elif args.input_data: - input_data = ' '.join(args.input_data) + input_data = [] + logger = logging.getLogger(__name__) + for item in args.input_data: + if os.path.exists(item): + logger.warn(f'Reading content from file "{item}"') + with open(item, 'r') as f: + if input_data: + input_data[-1] = '\n' + input_data.extend((f.read(), '\n')) + else: + input_data.extend((item, ' ')) + + if input_data: + input_data.pop() # trailing whitespace + input_data = ''.join(input_data) else: input_data = sys.stdin.read() committing current work diff --git a/lm/__main__.py b/lm/__main__.py --- a/lm/__main__.py +++ b/lm/__main__.py @@ -35,6 +35,7 @@ async def amain(): else: input_data = sys.stdin.read() + #api = openai(model = 'gpt-4') api = spellbook() log = jsonfiles(prefix = 'gpt4-') log to arweave diff --git a/lm/__main__.py b/lm/__main__.py --- a/lm/__main__.py +++ b/lm/__main__.py @@ -1,6 +1,7 @@ from .lm.spellbook import spellbook from .lm.openai import openai from .log.jsonfiles import jsonfiles +from .log.arweaveditems import arweaveditems import argparse import asyncio @@ -38,15 +39,25 @@ async def amain(): #api = openai(model = 'gpt-4') api = spellbook() log = jsonfiles(prefix = 'gpt4-') + log2 = arweaveditems() - async with api, log: + async with api, log, log2: response = await api(input_data) - await log( - time = timestamp, - **api.metadata, - input = input_data, - output = response, - ) + for addr in await asyncio.gather( + log( + time = timestamp, + **api.metadata, + input = input_data, + output = response, + ), + log2( + time = timestamp, + **api.metadata, + input = input_data, + output = response, + ) + ): + logger.warn(addr) args.output.write(response) added __init__.py for subpackages diff --git a/lm/lm/__init__.py b/lm/lm/__init__.py new file mode 100644 --- /dev/null +++ b/lm/lm/__init__.py diff --git a/lm/log/__init__.py b/lm/log/__init__.py new file mode 100644 --- /dev/null +++ b/lm/log/__init__.py enable openai, i have not gotten llama going locally yet diff --git a/lm/__main__.py b/lm/__main__.py --- a/lm/__main__.py +++ b/lm/__main__.py @@ -1,4 +1,4 @@ -from .lm.spellbook import spellbook +from .lm.gradio import gradio from .lm.openai import openai from .log.jsonfiles import jsonfiles from .log.arweaveditems import arweaveditems @@ -36,8 +36,8 @@ async def amain(): else: input_data = sys.stdin.read() - #api = openai(model = 'gpt-4') - api = spellbook() + api = openai(model = 'gpt-4') + #api = gradio() log = jsonfiles(prefix = 'gpt4-') log2 = arweaveditems() added commandline options for selecting any lm.lm module and lm.log module