From db84346849c1f4a7d38cdacc56080948c32785b9 Mon Sep 17 00:00:00 2001 From: Josh Knapp Date: Fri, 14 Feb 2025 11:22:47 -0800 Subject: [PATCH] first commit for git-to-kb --- git-to-kb.py | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 git-to-kb.py diff --git a/git-to-kb.py b/git-to-kb.py new file mode 100644 index 0000000..5adf66f --- /dev/null +++ b/git-to-kb.py @@ -0,0 +1,105 @@ +import requests +import os +import glob + +def create_knowledge_base_from_repo(token, base_url, repo_path, kb_name, kb_purpose="Documentation"): + """ + Create a knowledge base from a git repository + + Args: + token (str): Your OpenWebUI API token + base_url (str): Base URL of your OpenWebUI instance (e.g. http://localhost:3000) + repo_path (str): Path to the local git repository + kb_name (str): Name for the knowledge base + kb_purpose (str): Purpose description for the knowledge base + """ + headers = { + 'Authorization': f'Bearer {token}', + 'Accept': 'application/json' + } + + # 1. Create knowledge base + kb_url = f"{base_url}/api/v1/knowledge/create" + kb_data = { + "name": kb_name, + "description": kb_purpose + } + kb_response = requests.post(kb_url, headers=headers, json=kb_data) + if not kb_response.ok: + raise Exception(f"Failed to create knowledge base: {kb_response.text}") + + kb_id = kb_response.json().get('id') + print(f"Created knowledge base with ID: {kb_id}") + + # 2. Upload files and add them to knowledge base + file_types = ['*.txt', '*.md', '*.py', '*.js', '*.html', '*.css', '*.json', '*.yaml', '*.yml', '*.sh', '*.bat', 'Dockerfile', 'LICENSE'] + files_processed = 0 + + for file_pattern in file_types: + for file_path in glob.glob(os.path.join(repo_path, '**', file_pattern), recursive=True): + try: + # Skip .git directory + if '.git' in file_path: + continue + + # Upload file + with open(file_path, 'rb') as file: + files = {'file': file} + upload_response = requests.post( + f"{base_url}/api/v1/files/", + headers=headers, + files=files + ) + + if not upload_response.ok: + print(f"Failed to upload {file_path}: {upload_response.text}") + continue + + file_id = upload_response.json().get('id') + + # Add file to knowledge base + add_file_response = requests.post( + f"{base_url}/api/v1/knowledge/{kb_id}/file/add", + headers={'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'}, + json={'file_id': file_id} + ) + + if add_file_response.ok: + files_processed += 1 + print(f"Successfully processed: {file_path}") + else: + print(f"Failed to add {file_path} to knowledge base: {add_file_response.text}") + + except Exception as e: + print(f"Error processing {file_path}: {str(e)}") + + print(f"\nProcessing complete! Added {files_processed} files to knowledge base {kb_name}") + +if __name__ == "__main__": + import argparse + + # Set up argument parser + parser = argparse.ArgumentParser(description='Create a knowledge base from a git repository') + parser.add_argument('--token', '-t', required=True, help='Your OpenWebUI API token') + parser.add_argument('--base-url', '-u', required=True, help='Base URL of your OpenWebUI instance') + parser.add_argument('--repo-path', '-r', required=True, help='Path to the local git repository') + parser.add_argument('--kb-name', '-n', required=True, help='Name for the knowledge base') + parser.add_argument('--kb-purpose', '-p', required=False, help='Purpose/description for the knowledge base') + + # Parse arguments + args = parser.parse_args() + + # Build kwargs dictionary + kwargs = { + 'token': args.token, + 'base_url': args.base_url, + 'repo_path': args.repo_path, + 'kb_name': args.kb_name + } + + # Only add kb_purpose if it was provided + if args.kb_purpose: + kwargs['kb_purpose'] = args.kb_purpose + + # Use parsed arguments + create_knowledge_base_from_repo(**kwargs)