mirror of
https://github.com/danielmiessler/fabric
synced 2024-11-10 07:10:31 +00:00
initial
This commit is contained in:
parent
0659bbaa0e
commit
8b4da91579
@ -49,7 +49,7 @@ def main():
|
||||
help="Change the default model. For a list of available models, use the --listmodels flag.")
|
||||
|
||||
parser.add_argument(
|
||||
"--model", "-m", help="Select the model to use. NOTE: Will not work if you have set a default model. please use --clear to clear persistence before using this flag", default="gpt-4-turbo-preview"
|
||||
"--model", "-m", help="Select the model to use. NOTE: Will not work if you have set a default model. please use --clear to clear persistence before using this flag"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--listmodels", help="List all available models", action="store_true"
|
||||
@ -69,7 +69,7 @@ def main():
|
||||
os.makedirs(config)
|
||||
if args.setup:
|
||||
Setup().run()
|
||||
Alias()
|
||||
Alias().execute()
|
||||
sys.exit()
|
||||
if not os.path.exists(env_file) or not os.path.exists(config_patterns_directory):
|
||||
print("Please run --setup to set up your API key and download patterns.")
|
||||
@ -80,7 +80,6 @@ def main():
|
||||
sys.exit()
|
||||
if args.changeDefaultModel:
|
||||
Setup().default_model(args.changeDefaultModel)
|
||||
print(f"Default model changed to {args.changeDefaultModel}")
|
||||
sys.exit()
|
||||
if args.agents:
|
||||
# Handle the agents logic
|
||||
|
@ -1,6 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import pyperclip
|
||||
|
||||
pasted_text = pyperclip.paste()
|
||||
print(pasted_text)
|
@ -46,7 +46,14 @@ class Standalone:
|
||||
self.config_pattern_directory = config_directory
|
||||
self.pattern = pattern
|
||||
self.args = args
|
||||
self.model = args.model
|
||||
self.model = None
|
||||
if args.model:
|
||||
self.model = args.model
|
||||
else:
|
||||
try:
|
||||
self.model = os.environ["DEFAULT_MODEL"]
|
||||
except:
|
||||
self.model = 'gpt-4-turbo-preview'
|
||||
self.claude = False
|
||||
sorted_gpt_models, ollamaList, claudeList = self.fetch_available_models()
|
||||
self.local = self.model.strip() in ollamaList
|
||||
@ -265,7 +272,8 @@ class Standalone:
|
||||
def fetch_available_models(self):
|
||||
gptlist = []
|
||||
fullOllamaList = []
|
||||
claudeList = ['claude-3-opus-20240229', 'claude-3-sonnet-20240229', 'claude-2.1']
|
||||
claudeList = ['claude-3-opus-20240229',
|
||||
'claude-3-sonnet-20240229', 'claude-2.1']
|
||||
try:
|
||||
headers = {
|
||||
"Authorization": f"Bearer {self.client.api_key}"
|
||||
@ -367,45 +375,15 @@ class Update:
|
||||
class Alias:
|
||||
def __init__(self):
|
||||
self.config_files = []
|
||||
home_directory = os.path.expanduser("~")
|
||||
self.patterns = os.path.join(home_directory, ".config/fabric/patterns")
|
||||
if os.path.exists(os.path.join(home_directory, ".config/fabric/fabric-bootstrap.inc")):
|
||||
self.config_files.append(os.path.join(
|
||||
home_directory, ".config/fabric/fabric-bootstrap.inc"))
|
||||
self.remove_all_patterns()
|
||||
self.add_patterns()
|
||||
print('Aliases added successfully. Please restart your terminal to use them.')
|
||||
self.home_directory = os.path.expanduser("~")
|
||||
patternsFolder = os.path.join(
|
||||
self.home_directory, ".config/fabric/patterns")
|
||||
self.patterns = os.listdir(patternsFolder)
|
||||
|
||||
def add(self, name, alias):
|
||||
for file in self.config_files:
|
||||
with open(file, "a") as f:
|
||||
f.write(f"alias {name}='{alias}'\n")
|
||||
|
||||
def remove(self, pattern):
|
||||
for file in self.config_files:
|
||||
# Read the whole file first
|
||||
with open(file, "r") as f:
|
||||
wholeFile = f.read()
|
||||
|
||||
# Determine if the line to be removed is in the file
|
||||
target_line = f"alias {pattern}='fabric --pattern {pattern}'\n"
|
||||
if target_line in wholeFile:
|
||||
# If the line exists, replace it with nothing (remove it)
|
||||
wholeFile = wholeFile.replace(target_line, "")
|
||||
|
||||
# Write the modified content back to the file
|
||||
with open(file, "w") as f:
|
||||
f.write(wholeFile)
|
||||
|
||||
def remove_all_patterns(self):
|
||||
allPatterns = os.listdir(self.patterns)
|
||||
for pattern in allPatterns:
|
||||
self.remove(pattern)
|
||||
|
||||
def add_patterns(self):
|
||||
allPatterns = os.listdir(self.patterns)
|
||||
for pattern in allPatterns:
|
||||
self.add(pattern, f"fabric --pattern {pattern}")
|
||||
def execute(self):
|
||||
with open(os.path.join(self.home_directory, ".config/fabric/fabric-bootstrap.inc"), "w") as w:
|
||||
for pattern in self.patterns:
|
||||
w.write(f"alias {pattern}='fabric --pattern {pattern}'\n")
|
||||
|
||||
|
||||
class Setup:
|
||||
@ -420,6 +398,14 @@ class Setup:
|
||||
self.pattern_directory = os.path.join(
|
||||
self.config_directory, "patterns")
|
||||
os.makedirs(self.pattern_directory, exist_ok=True)
|
||||
self.shconfigs = []
|
||||
home = os.path.expanduser("~")
|
||||
if os.path.exists(os.path.join(home, ".bashrc")):
|
||||
self.shconfigs.append(os.path.join(home, ".bashrc"))
|
||||
if os.path.exists(os.path.join(home, ".bash_profile")):
|
||||
self.shconfigs.append(os.path.join(home, ".bash_profile"))
|
||||
if os.path.exists(os.path.join(home, ".zshrc")):
|
||||
self.shconfigs.append(os.path.join(home, ".zshrc"))
|
||||
self.env_file = os.path.join(self.config_directory, ".env")
|
||||
self.gptlist = []
|
||||
self.fullOllamaList = []
|
||||
@ -435,6 +421,20 @@ class Setup:
|
||||
except:
|
||||
pass
|
||||
|
||||
def update_shconfigs(self):
|
||||
bootstrap_file = os.path.join(
|
||||
self.config_directory, "fabric-bootstrap.inc")
|
||||
sourceLine = f'if [ -f "{bootstrap_file}" ]; then . "{bootstrap_file}"; fi'
|
||||
for config in self.shconfigs:
|
||||
lines = None
|
||||
with open(config, 'r') as f:
|
||||
lines = f.readlines()
|
||||
with open(config, 'w') as f:
|
||||
for line in lines:
|
||||
if sourceLine not in line:
|
||||
f.write(line)
|
||||
f.write(sourceLine)
|
||||
|
||||
def fetch_available_models(self):
|
||||
headers = {
|
||||
"Authorization": f"Bearer {self.openaiapi_key}"
|
||||
@ -544,96 +544,6 @@ class Setup:
|
||||
with open(self.env_file, "w") as f:
|
||||
f.write(f"YOUTUBE_API_KEY={youtube_key}\n")
|
||||
|
||||
def update_fabric_command(self, line, model):
|
||||
fabric_command_regex = re.compile(
|
||||
r"(alias.*fabric --pattern\s+\S+.*?)( --model.*)?'")
|
||||
match = fabric_command_regex.search(line)
|
||||
if match:
|
||||
base_command = match.group(1)
|
||||
# Provide a default value for current_flag
|
||||
current_flag = match.group(2) if match.group(2) else ""
|
||||
new_flag = ""
|
||||
new_flag = f" --model {model}"
|
||||
# Update the command if the new flag is different or to remove an existing flag.
|
||||
# Ensure to add the closing quote that was part of the original regex
|
||||
return f"{base_command}{new_flag}'\n"
|
||||
else:
|
||||
return line # Return the line unmodified if no match is found.
|
||||
|
||||
def update_fabric_alias(self, line, model):
|
||||
fabric_alias_regex = re.compile(
|
||||
r"(alias fabric='[^']+?)( --model.*)?'")
|
||||
match = fabric_alias_regex.search(line)
|
||||
if match:
|
||||
base_command, current_flag = match.groups()
|
||||
new_flag = f" --model {model}"
|
||||
# Update the alias if the new flag is different or to remove an existing flag.
|
||||
return f"{base_command}{new_flag}'\n"
|
||||
else:
|
||||
return line # Return the line unmodified if no match is found.
|
||||
|
||||
def clear_alias(self, line):
|
||||
fabric_command_regex = re.compile(
|
||||
r"(alias fabric='[^']+?)( --model.*)?'")
|
||||
match = fabric_command_regex.search(line)
|
||||
if match:
|
||||
base_command = match.group(1)
|
||||
return f"{base_command}'\n"
|
||||
else:
|
||||
return line # Return the line unmodified if no match is found.
|
||||
|
||||
def clear_env_line(self, line):
|
||||
fabric_command_regex = re.compile(
|
||||
r"(alias.*fabric --pattern\s+\S+.*?)( --model.*)?'")
|
||||
match = fabric_command_regex.search(line)
|
||||
if match:
|
||||
base_command = match.group(1)
|
||||
return f"{base_command}'\n"
|
||||
else:
|
||||
return line # Return the line unmodified if no match is found.
|
||||
|
||||
def pattern(self, line):
|
||||
fabric_command_regex = re.compile(
|
||||
r"(alias fabric='[^']+?)( --model.*)?'")
|
||||
match = fabric_command_regex.search(line)
|
||||
if match:
|
||||
base_command = match.group(1)
|
||||
return f"{base_command}'\n"
|
||||
else:
|
||||
return line # Return the line unmodified if no match is found.
|
||||
|
||||
def clean_env(self):
|
||||
"""Clear the DEFAULT_MODEL from the environment file.
|
||||
|
||||
Returns:
|
||||
None
|
||||
"""
|
||||
user_home = os.path.expanduser("~")
|
||||
sh_config = None
|
||||
# Check for shell configuration files
|
||||
if os.path.exists(os.path.join(user_home, ".config/fabric/fabric-bootstrap.inc")):
|
||||
sh_config = os.path.join(
|
||||
user_home, ".config/fabric/fabric-bootstrap.inc")
|
||||
else:
|
||||
print("No environment file found.")
|
||||
if sh_config:
|
||||
with open(sh_config, "r") as f:
|
||||
lines = f.readlines()
|
||||
with open(sh_config, "w") as f:
|
||||
for line in lines:
|
||||
modified_line = line
|
||||
# Update existing fabric commands
|
||||
if "fabric --pattern" in line:
|
||||
modified_line = self.clear_env_line(
|
||||
modified_line)
|
||||
elif "fabric=" in line:
|
||||
modified_line = self.clear_alias(
|
||||
modified_line)
|
||||
f.write(modified_line)
|
||||
self.remove_duplicates(env_file)
|
||||
else:
|
||||
print("No shell configuration file found.")
|
||||
|
||||
def default_model(self, model):
|
||||
"""Set the default model in the environment file.
|
||||
|
||||
@ -651,43 +561,30 @@ class Setup:
|
||||
|
||||
# Compile regular expressions outside of the loop for efficiency
|
||||
|
||||
user_home = os.path.expanduser("~")
|
||||
sh_config = None
|
||||
# Check for shell configuration files
|
||||
if os.path.exists(os.path.join(user_home, ".config/fabric/fabric-bootstrap.inc")):
|
||||
sh_config = os.path.join(
|
||||
user_home, ".config/fabric/fabric-bootstrap.inc")
|
||||
|
||||
if sh_config:
|
||||
with open(sh_config, "r") as f:
|
||||
if os.path.exists(os.path.expanduser("~/.config/fabric/.env")):
|
||||
env = os.path.expanduser("~/.config/fabric/.env")
|
||||
there = False
|
||||
with open(env, "r") as f:
|
||||
lines = f.readlines()
|
||||
with open(sh_config, "w") as f:
|
||||
for line in lines:
|
||||
modified_line = line
|
||||
# Update existing fabric commands
|
||||
if "fabric --pattern" in line:
|
||||
modified_line = self.update_fabric_command(
|
||||
modified_line, model)
|
||||
elif "fabric=" in line:
|
||||
modified_line = self.update_fabric_alias(
|
||||
modified_line, model)
|
||||
f.write(modified_line)
|
||||
if "DEFAULT_MODEL" in lines:
|
||||
there = True
|
||||
if there:
|
||||
with open(env, "w") as f:
|
||||
for line in lines:
|
||||
modified_line = line
|
||||
# Update existing fabric commands
|
||||
if "DEFAULT_MODEL" in line:
|
||||
modified_line = f'DEFAULT_MODEL={model}\n'
|
||||
f.write(modified_line)
|
||||
else:
|
||||
with open(env, "a") as f:
|
||||
f.write(f'DEFAULT_MODEL={model}\n')
|
||||
print(f"""Default model changed to {
|
||||
model}. Please restart your terminal to use it.""")
|
||||
else:
|
||||
print("No shell configuration file found.")
|
||||
|
||||
def remove_duplicates(self, filename):
|
||||
unique_lines = set()
|
||||
with open(filename, 'r') as file:
|
||||
lines = file.readlines()
|
||||
|
||||
with open(filename, 'w') as file:
|
||||
for line in lines:
|
||||
if line not in unique_lines:
|
||||
file.write(line)
|
||||
unique_lines.add(line)
|
||||
|
||||
def patterns(self):
|
||||
""" Method to update patterns and exit the system.
|
||||
|
||||
@ -717,6 +614,7 @@ class Setup:
|
||||
youtubekey = input()
|
||||
self.youtube_key(youtubekey)
|
||||
self.patterns()
|
||||
self.update_shconfigs()
|
||||
|
||||
|
||||
class Transcribe:
|
||||
|
Loading…
Reference in New Issue
Block a user