Skip to content

Commit 257f393

Browse files
committed
feat: async invocation
1 parent 3b7b701 commit 257f393

17 files changed

+28
-51
lines changed

scrapegraphai/builders/graph_builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def build_graph(self):
120120
Returns:
121121
dict: A JSON representation of the graph configuration.
122122
"""
123-
return self.chain.invoke(self.prompt)
123+
return self.chain.ainvoke(self.prompt)
124124

125125
@staticmethod
126126
def convert_json_to_graphviz(json_data, format: str = 'pdf'):

scrapegraphai/nodes/generate_answer_csv_node.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def execute(self, state):
126126
)
127127

128128
chain = prompt | self.llm_model | output_parser
129-
answer = chain.invoke({"question": user_prompt})
129+
answer = chain.ainvoke({"question": user_prompt})
130130
state.update({self.output[0]: answer})
131131
return state
132132

@@ -157,7 +157,7 @@ def execute(self, state):
157157
)
158158

159159
merge_chain = merge_prompt | self.llm_model | output_parser
160-
answer = merge_chain.invoke({"context": batch_results, "question": user_prompt})
160+
answer = merge_chain.ainvoke({"context": batch_results, "question": user_prompt})
161161

162162
state.update({self.output[0]: answer})
163163
return state

scrapegraphai/nodes/generate_answer_node.py

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
"""
2-
generate_answer_node module
3-
"""
41
from typing import List, Optional
52
from langchain.prompts import PromptTemplate
63
from langchain_core.output_parsers import JsonOutputParser
@@ -18,26 +15,6 @@
1815
)
1916

2017
class GenerateAnswerNode(BaseNode):
21-
"""
22-
Initializes the GenerateAnswerNode class.
23-
24-
Args:
25-
input (str): The input data type for the node.
26-
output (List[str]): The output data type(s) for the node.
27-
node_config (Optional[dict]): Configuration dictionary for the node,
28-
which includes the LLM model, verbosity, schema, and other settings.
29-
Defaults to None.
30-
node_name (str): The name of the node. Defaults to "GenerateAnswer".
31-
32-
Attributes:
33-
llm_model: The language model specified in the node configuration.
34-
verbose (bool): Whether verbose mode is enabled.
35-
force (bool): Whether to force certain behaviors, overriding defaults.
36-
script_creator (bool): Whether the node is in script creation mode.
37-
is_md_scraper (bool): Whether the node is scraping markdown data.
38-
additional_info (Optional[str]): Any additional information to be
39-
included in the prompt templates.
40-
"""
4118
def __init__(
4219
self,
4320
input: str,
@@ -113,7 +90,7 @@ def execute(self, state: dict) -> dict:
11390
chain = prompt | self.llm_model
11491
if output_parser:
11592
chain = chain | output_parser
116-
answer = chain.invoke({"question": user_prompt})
93+
answer = chain.ainvoke({"question": user_prompt})
11794

11895
state.update({self.output[0]: answer})
11996
return state
@@ -144,7 +121,7 @@ def execute(self, state: dict) -> dict:
144121
merge_chain = merge_prompt | self.llm_model
145122
if output_parser:
146123
merge_chain = merge_chain | output_parser
147-
answer = merge_chain.invoke({"context": batch_results, "question": user_prompt})
124+
answer = merge_chain.ainvoke({"context": batch_results, "question": user_prompt})
148125

149126
state.update({self.output[0]: answer})
150127
return state

scrapegraphai/nodes/generate_answer_node_k_level.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def execute(self, state: dict) -> dict:
143143
merge_chain = merge_prompt | self.llm_model
144144
if output_parser:
145145
merge_chain = merge_chain | output_parser
146-
answer = merge_chain.invoke({"context": batch_results, "question": user_prompt})
146+
answer = merge_chain.ainvoke({"context": batch_results, "question": user_prompt})
147147

148148
state["answer"] = answer
149149

scrapegraphai/nodes/generate_answer_omni_node.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def execute(self, state: dict) -> dict:
121121
)
122122

123123
chain = prompt | self.llm_model | output_parser
124-
answer = chain.invoke({"question": user_prompt})
124+
answer = chain.ainvoke({"question": user_prompt})
125125

126126
state.update({self.output[0]: answer})
127127
return state
@@ -154,7 +154,7 @@ def execute(self, state: dict) -> dict:
154154
)
155155

156156
merge_chain = merge_prompt | self.llm_model | output_parser
157-
answer = merge_chain.invoke({"context": batch_results, "question": user_prompt})
157+
answer = merge_chain.ainvoke({"context": batch_results, "question": user_prompt})
158158

159159
state.update({self.output[0]: answer})
160160
return state

scrapegraphai/nodes/generate_answer_pdf_node.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def execute(self, state):
128128
},
129129
)
130130
chain = prompt | self.llm_model | output_parser
131-
answer = chain.invoke({"question": user_prompt})
131+
answer = chain.ainvoke({"question": user_prompt})
132132

133133

134134
state.update({self.output[0]: answer})
@@ -162,7 +162,7 @@ def execute(self, state):
162162
)
163163

164164
merge_chain = merge_prompt | self.llm_model | output_parser
165-
answer = merge_chain.invoke({"context": batch_results, "question": user_prompt})
165+
answer = merge_chain.ainvoke({"context": batch_results, "question": user_prompt})
166166

167167
state.update({self.output[0]: answer})
168168
return state

scrapegraphai/nodes/generate_code_node.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ def generate_initial_code(self, state: dict) -> str:
325325
output_parser = StrOutputParser()
326326

327327
chain = prompt | self.llm_model | output_parser
328-
generated_code = chain.invoke({})
328+
generated_code = chain.ainvoke({})
329329
return generated_code
330330

331331
def semantic_comparison(self, generated_result: Any, reference_result: Any) -> Dict[str, Any]:
@@ -368,7 +368,7 @@ def semantic_comparison(self, generated_result: Any, reference_result: Any) -> D
368368
)
369369

370370
chain = prompt | self.llm_model | output_parser
371-
return chain.invoke({
371+
return chain.ainvoke({
372372
"generated_result": json.dumps(generated_result, indent=2),
373373
"reference_result": json.dumps(reference_result_dict, indent=2)
374374
})

scrapegraphai/nodes/generate_scraper_node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def execute(self, state: dict) -> dict:
131131
)
132132
map_chain = prompt | self.llm_model | StrOutputParser()
133133

134-
answer = map_chain.invoke({"question": user_prompt})
134+
answer = map_chain.ainvoke({"question": user_prompt})
135135

136136
state.update({self.output[0]: answer})
137137
return state

scrapegraphai/nodes/html_analyzer_node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def execute(self, state: dict) -> dict:
9393
output_parser = StrOutputParser()
9494

9595
chain = prompt | self.llm_model | output_parser
96-
html_analysis = chain.invoke({})
96+
html_analysis = chain.ainvoke({})
9797

9898
state.update({self.output[0]: html_analysis, self.output[1]: reduced_html})
9999
return state

scrapegraphai/nodes/merge_answers_node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def execute(self, state: dict) -> dict:
9595
)
9696

9797
merge_chain = prompt_template | self.llm_model | output_parser
98-
answer = merge_chain.invoke({"user_prompt": user_prompt})
98+
answer = merge_chain.ainvoke({"user_prompt": user_prompt})
9999
answer["sources"] = state.get("urls", [])
100100

101101
state.update({self.output[0]: answer})

scrapegraphai/nodes/merge_generated_scripts_node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def execute(self, state: dict) -> dict:
7474
)
7575

7676
merge_chain = prompt_template | self.llm_model | StrOutputParser()
77-
answer = merge_chain.invoke({"user_prompt": user_prompt})
77+
answer = merge_chain.ainvoke({"user_prompt": user_prompt})
7878

7979
state.update({self.output[0]: answer})
8080
return state

scrapegraphai/nodes/prompt_refiner_node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def execute(self, state: dict) -> dict:
9696
output_parser = StrOutputParser()
9797

9898
chain = prompt | self.llm_model | output_parser
99-
refined_prompt = chain.invoke({})
99+
refined_prompt = chain.ainvoke({})
100100

101101
state.update({self.output[0]: refined_prompt})
102102
return state

scrapegraphai/nodes/reasoning_node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def execute(self, state: dict) -> dict:
9191
output_parser = StrOutputParser()
9292

9393
chain = prompt | self.llm_model | output_parser
94-
refined_prompt = chain.invoke({})
94+
refined_prompt = chain.ainvoke({})
9595

9696
state.update({self.output[0]: refined_prompt})
9797
return state

scrapegraphai/nodes/robots_node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ def execute(self, state: dict) -> dict:
108108
)
109109

110110
chain = prompt | self.llm_model | output_parser
111-
is_scrapable = chain.invoke({"path": source})[0]
111+
is_scrapable = chain.ainvoke({"path": source})[0]
112112

113113
if "no" in is_scrapable:
114114
self.logger.warning(

scrapegraphai/nodes/search_link_node.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def execute(self, state: dict) -> dict:
142142
input_variables=["content", "user_prompt"],
143143
)
144144
merge_chain = merge_prompt | self.llm_model | output_parser
145-
answer = merge_chain.invoke(
145+
answer = merge_chain.ainvoke(
146146
{"content": chunk.page_content}
147147
)
148148
relevant_links += answer

scrapegraphai/utils/code_error_analysis.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def syntax_focused_analysis(state: dict, llm_model) -> str:
3131
prompt = PromptTemplate(template=TEMPLATE_SYNTAX_ANALYSIS,
3232
input_variables=["generated_code", "errors"])
3333
chain = prompt | llm_model | StrOutputParser()
34-
return chain.invoke({
34+
return chain.ainvoke({
3535
"generated_code": state["generated_code"],
3636
"errors": state["errors"]["syntax"]
3737
})
@@ -51,7 +51,7 @@ def execution_focused_analysis(state: dict, llm_model) -> str:
5151
input_variables=["generated_code", "errors",
5252
"html_code", "html_analysis"])
5353
chain = prompt | llm_model | StrOutputParser()
54-
return chain.invoke({
54+
return chain.ainvoke({
5555
"generated_code": state["generated_code"],
5656
"errors": state["errors"]["execution"],
5757
"html_code": state["html_code"],
@@ -73,7 +73,7 @@ def validation_focused_analysis(state: dict, llm_model) -> str:
7373
input_variables=["generated_code", "errors",
7474
"json_schema", "execution_result"])
7575
chain = prompt | llm_model | StrOutputParser()
76-
return chain.invoke({
76+
return chain.ainvoke({
7777
"generated_code": state["generated_code"],
7878
"errors": state["errors"]["validation"],
7979
"json_schema": state["json_schema"],
@@ -97,7 +97,7 @@ def semantic_focused_analysis(state: dict, comparison_result: Dict[str, Any], ll
9797
input_variables=["generated_code",
9898
"differences", "explanation"])
9999
chain = prompt | llm_model | StrOutputParser()
100-
return chain.invoke({
100+
return chain.ainvoke({
101101
"generated_code": state["generated_code"],
102102
"differences": json.dumps(comparison_result["differences"], indent=2),
103103
"explanation": comparison_result["explanation"]

scrapegraphai/utils/code_error_correction.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def syntax_focused_code_generation(state: dict, analysis: str, llm_model) -> str
3333
prompt = PromptTemplate(template=TEMPLATE_SYNTAX_CODE_GENERATION,
3434
input_variables=["analysis", "generated_code"])
3535
chain = prompt | llm_model | StrOutputParser()
36-
return chain.invoke({
36+
return chain.ainvoke({
3737
"analysis": analysis,
3838
"generated_code": state["generated_code"]
3939
})
@@ -53,7 +53,7 @@ def execution_focused_code_generation(state: dict, analysis: str, llm_model) ->
5353
prompt = PromptTemplate(template=TEMPLATE_EXECUTION_CODE_GENERATION,
5454
input_variables=["analysis", "generated_code"])
5555
chain = prompt | llm_model | StrOutputParser()
56-
return chain.invoke({
56+
return chain.ainvoke({
5757
"analysis": analysis,
5858
"generated_code": state["generated_code"]
5959
})
@@ -73,7 +73,7 @@ def validation_focused_code_generation(state: dict, analysis: str, llm_model) ->
7373
prompt = PromptTemplate(template=TEMPLATE_VALIDATION_CODE_GENERATION,
7474
input_variables=["analysis", "generated_code", "json_schema"])
7575
chain = prompt | llm_model | StrOutputParser()
76-
return chain.invoke({
76+
return chain.ainvoke({
7777
"analysis": analysis,
7878
"generated_code": state["generated_code"],
7979
"json_schema": state["json_schema"]
@@ -94,7 +94,7 @@ def semantic_focused_code_generation(state: dict, analysis: str, llm_model) -> s
9494
prompt = PromptTemplate(template=TEMPLATE_SEMANTIC_CODE_GENERATION,
9595
input_variables=["analysis", "generated_code", "generated_result", "reference_result"])
9696
chain = prompt | llm_model | StrOutputParser()
97-
return chain.invoke({
97+
return chain.ainvoke({
9898
"analysis": analysis,
9999
"generated_code": state["generated_code"],
100100
"generated_result": json.dumps(state["execution_result"], indent=2),

0 commit comments

Comments
 (0)