Skip to content
This repository was archived by the owner on Nov 1, 2024. It is now read-only.

Labgraph pilot #103

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
60 changes: 60 additions & 0 deletions extensions/labgraph_pilot/labgraph_pilot/description_to_code.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import requests
import json
import os
from dotenv import load_dotenv

load_dotenv()

from keyword_generation import KeywordGeneration

class DescriptionToCode:
"""
A class that send the request to OpenAI API with a prompt to get back the code
"""
def __init__(self):
self.prompt = "Provide well-engineered code for"
self.model = "text-davinci-003"
self.max_tokens = 500 # maximum length for the response from the API request
self.temperature = 0
self.api_key = os.getenv('OPENAI_API_KEY')

def get_code_from_description(self, api_name):
url = "https://api.openai.com/v1/completions"

payload = json.dumps({
"model": self.model,
"prompt": self.prompt + api_name,
"max_tokens": 500, # handcrafted parameter
"temperature": 0
})

headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + self.api_key
}

response = requests.request("POST", url, headers=headers, data=payload)
json_data = json.loads(response.text)
generated_code = json_data['choices'][0]['text']

return generated_code

'''
Main function of generating the code for each API name and save it to a local file
'''
def get_code(self):
keywordGeneration = KeywordGeneration()
apis = keywordGeneration.extract_keywords()

with open('output.txt', 'w') as file:
code_blocks = []

for api in apis:
code_block = self.get_code_from_description(api)
code_blocks.append(code_block)

file.writelines("% s\n" % code_block for code_block in code_blocks)

# create a test object to run the get_code function
test = DescriptionToCode()
test.get_code()
52 changes: 52 additions & 0 deletions extensions/labgraph_pilot/labgraph_pilot/keyword_generation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# generate the list names from predefined urls
# sicpy, numpy, sklearn
import requests
from bs4 import BeautifulSoup

class KeywordGeneration:

'''
A class that generates lists of APIs for different categories
(hardware devices, signal processing, etc.)
'''
def __init__(self) -> None:
self.predefined_urls = ['https://docs.scipy.org/doc/scipy/reference/signal.html',
'https://numpy.org/doc/stable/reference/routines.ma.html',
'https://numpy.org/doc/stable/reference/routines.math.html',
'https://numpy.org/doc/1.24/reference/routines.html',
'https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing',
]
self.keywords = []

'''
This function gets the html content from the predefined urls using requests library. Then use BeautifulSoup to
extract the needed keywords
'''

def extract_keywords(self):

for url in self.predefined_urls:
page = requests.get(url)
soup = BeautifulSoup(page.text, features="lxml")

keywords_elements = soup.find_all("tr")

for element in keywords_elements:
for tag in element.recursiveChildGenerator():
if hasattr(tag, 'attrs'):
for key, value in tag.attrs.items():
if key == 'title':
self.keywords.append(value)

self.keywords.remove('(in joblib v1.3.0.dev0)') # remove unexpected parsed keyword

with open('keyword.txt', 'w') as file: # save all keywords to a text file
keywords = []

for keyword in self.keywords:
keywords.append(keyword)

file.writelines("% s\n" % keyword for keyword in keywords)
return self.keywords
test = KeywordGeneration()
test.extract_keywords()
21 changes: 21 additions & 0 deletions extensions/labgraph_pilot/labgraph_pilot/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env python3
# Copyright 2004-present Facebook. All Rights Reserved.

from setuptools import find_packages, setup


setup(
name="labgraph_pilot",
version="1.0.0",
description="",
packages=find_packages(),
python_requires=">=3.6, <3.7",
install_requires=[
"dataclasses==0.6",
"labgraph>=1.0.2",
"matplotlib==3.1.1",
"numpy==1.16.4",
"PyQt5-sip==12.8.1",
"pyqtgraph==0.11.1",
],
)
Loading