Allow in question -s for just sourcing file and -S to source file with ``` encapsulation.
This commit is contained in:
parent
3eca53998b
commit
86eebc39ea
@ -15,19 +15,21 @@ def create_message(chat: ChatDB, args: argparse.Namespace) -> Message:
|
|||||||
question_parts = []
|
question_parts = []
|
||||||
question_list = args.question if args.question is not None else []
|
question_list = args.question if args.question is not None else []
|
||||||
source_list = args.source if args.source is not None else []
|
source_list = args.source if args.source is not None else []
|
||||||
|
code_list = args.source_code if args.source_code is not None else []
|
||||||
|
|
||||||
# FIXME: don't surround all sourced files with ```
|
for question, source, code in zip_longest(question_list, source_list, code_list, fillvalue=None):
|
||||||
# -> do it only if '--source-code-only' is True and no source code
|
if question is not None and len(question.strip()) > 0:
|
||||||
# could be extracted from that file
|
|
||||||
for question, source in zip_longest(question_list, source_list, fillvalue=None):
|
|
||||||
if question is not None and source is not None:
|
|
||||||
with open(source) as r:
|
|
||||||
question_parts.append(f"{question}\n\n```\n{r.read().strip()}\n```")
|
|
||||||
elif question is not None:
|
|
||||||
question_parts.append(question)
|
question_parts.append(question)
|
||||||
elif source is not None:
|
if source is not None and len(source) > 0:
|
||||||
with open(source) as r:
|
with open(source) as r:
|
||||||
question_parts.append(f"```\n{r.read().strip()}\n```")
|
content = r.read().strip()
|
||||||
|
if len(content) > 0:
|
||||||
|
question_parts.append(content)
|
||||||
|
if code is not None and len(code) > 0:
|
||||||
|
with open(code) as r:
|
||||||
|
content = r.read().strip()
|
||||||
|
if len(content) > 0:
|
||||||
|
question_parts.append(f"```\n{content}\n```")
|
||||||
|
|
||||||
full_question = '\n\n'.join(question_parts)
|
full_question = '\n\n'.join(question_parts)
|
||||||
|
|
||||||
|
|||||||
@ -170,9 +170,8 @@ def create_parser() -> argparse.ArgumentParser:
|
|||||||
question_group.add_argument('-p', '--process', nargs='*', help='Process existing questions')
|
question_group.add_argument('-p', '--process', nargs='*', help='Process existing questions')
|
||||||
question_cmd_parser.add_argument('-O', '--overwrite', help='Overwrite existing messages when repeating them',
|
question_cmd_parser.add_argument('-O', '--overwrite', help='Overwrite existing messages when repeating them',
|
||||||
action='store_true')
|
action='store_true')
|
||||||
question_cmd_parser.add_argument('-s', '--source', nargs='+', help='Source add content of a file to the query')
|
question_cmd_parser.add_argument('-s', '--source', nargs='+', help='Add content of a file to the query')
|
||||||
question_cmd_parser.add_argument('-S', '--source-code-only', help='Add pure source code to the chat history',
|
question_cmd_parser.add_argument('-S', '--source-code', nargs='+', help='Add source code file content to the chat history')
|
||||||
action='store_true')
|
|
||||||
|
|
||||||
# 'hist' command parser
|
# 'hist' command parser
|
||||||
hist_cmd_parser = cmdparser.add_parser('hist', parents=[tag_parser],
|
hist_cmd_parser = cmdparser.add_parser('hist', parents=[tag_parser],
|
||||||
|
|||||||
@ -23,7 +23,7 @@ class TestMessageCreate(unittest.TestCase):
|
|||||||
# create arguments mock
|
# create arguments mock
|
||||||
self.args = MagicMock(spec=argparse.Namespace)
|
self.args = MagicMock(spec=argparse.Namespace)
|
||||||
self.args.source = None
|
self.args.source = None
|
||||||
self.args.source_code_only = False
|
self.args.source_code = None
|
||||||
self.args.ai = None
|
self.args.ai = None
|
||||||
self.args.model = None
|
self.args.model = None
|
||||||
self.args.output_tags = None
|
self.args.output_tags = None
|
||||||
@ -94,11 +94,11 @@ Is it good?"""))
|
|||||||
# source file contains no source code
|
# source file contains no source code
|
||||||
# -> don't expect any in the question
|
# -> don't expect any in the question
|
||||||
self.assertEqual(len(message.question.source_code()), 0)
|
self.assertEqual(len(message.question.source_code()), 0)
|
||||||
self.assertEqual(message.question, Question("""What is this?
|
self.assertEqual(message.question, Question(f"""What is this?
|
||||||
|
|
||||||
{self.source_file1_content}"""))
|
{self.source_file1_content}"""))
|
||||||
|
|
||||||
def test_single_question_with_embedded_source_code_source(self) -> None:
|
def test_single_question_with_embedded_source_source(self) -> None:
|
||||||
self.args.question = ["What is this?"]
|
self.args.question = ["What is this?"]
|
||||||
self.args.source = [f"{self.source_file2.name}"]
|
self.args.source = [f"{self.source_file2.name}"]
|
||||||
message = create_message(self.chat, self.args)
|
message = create_message(self.chat, self.args)
|
||||||
@ -106,6 +106,20 @@ Is it good?"""))
|
|||||||
# source file contains 1 source code block
|
# source file contains 1 source code block
|
||||||
# -> expect it in the question
|
# -> expect it in the question
|
||||||
self.assertEqual(len(message.question.source_code()), 1)
|
self.assertEqual(len(message.question.source_code()), 1)
|
||||||
self.assertEqual(message.question, Question("""What is this?
|
self.assertEqual(message.question, Question(f"""What is this?
|
||||||
|
|
||||||
{self.source_file2_content}"""))
|
{self.source_file2_content}"""))
|
||||||
|
|
||||||
|
def test_single_question_with_embedded_source_code_source(self) -> None:
|
||||||
|
self.args.question = ["What is this?"]
|
||||||
|
self.args.source_code = [f"{self.source_file2.name}"]
|
||||||
|
message = create_message(self.chat, self.args)
|
||||||
|
self.assertIsInstance(message, Message)
|
||||||
|
# source file contains 1 source code block
|
||||||
|
# -> expect it in the question
|
||||||
|
self.assertEqual(len(message.question.source_code()), 2)
|
||||||
|
self.assertEqual(message.question, Question(f"""What is this?
|
||||||
|
|
||||||
|
```
|
||||||
|
{self.source_file2_content}
|
||||||
|
```"""))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user