mirror of
https://github.com/khoaliber/khoj.git
synced 2026-03-10 13:26:13 +00:00
Use instruction instead of query as code tool argument
This commit is contained in:
@@ -1003,9 +1003,9 @@ Chat History:
|
|||||||
---
|
---
|
||||||
{chat_history}
|
{chat_history}
|
||||||
|
|
||||||
User Query:
|
User Instructions:
|
||||||
---
|
---
|
||||||
{query}
|
{instructions}
|
||||||
""".strip()
|
""".strip()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class GeneratedCode(NamedTuple):
|
|||||||
|
|
||||||
|
|
||||||
async def run_code(
|
async def run_code(
|
||||||
query: str,
|
instructions: str,
|
||||||
conversation_history: List[ChatMessageModel],
|
conversation_history: List[ChatMessageModel],
|
||||||
context: str,
|
context: str,
|
||||||
location_data: LocationData,
|
location_data: LocationData,
|
||||||
@@ -63,12 +63,12 @@ async def run_code(
|
|||||||
):
|
):
|
||||||
# Generate Code
|
# Generate Code
|
||||||
if send_status_func:
|
if send_status_func:
|
||||||
async for event in send_status_func(f"**Generate code snippet** for {query}"):
|
async for event in send_status_func(f"**Generate code snippet** for {instructions}"):
|
||||||
yield {ChatEvent.STATUS: event}
|
yield {ChatEvent.STATUS: event}
|
||||||
try:
|
try:
|
||||||
with timer("Chat actor: Generate programs to execute", logger):
|
with timer("Chat actor: Generate programs to execute", logger):
|
||||||
generated_code = await generate_python_code(
|
generated_code = await generate_python_code(
|
||||||
query,
|
instructions,
|
||||||
conversation_history,
|
conversation_history,
|
||||||
context,
|
context,
|
||||||
location_data,
|
location_data,
|
||||||
@@ -79,7 +79,7 @@ async def run_code(
|
|||||||
query_files,
|
query_files,
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise ValueError(f"Failed to generate code for {query} with error: {e}")
|
raise ValueError(f"Failed to generate code for {instructions} with error: {e}")
|
||||||
|
|
||||||
# Prepare Input Data
|
# Prepare Input Data
|
||||||
input_data = []
|
input_data = []
|
||||||
@@ -101,21 +101,21 @@ async def run_code(
|
|||||||
code = result.pop("code")
|
code = result.pop("code")
|
||||||
cleaned_result = truncate_code_context({"cleaned": {"results": result}})["cleaned"]["results"]
|
cleaned_result = truncate_code_context({"cleaned": {"results": result}})["cleaned"]["results"]
|
||||||
logger.info(f"Executed Code\n----\n{code}\n----\nResult\n----\n{cleaned_result}\n----")
|
logger.info(f"Executed Code\n----\n{code}\n----\nResult\n----\n{cleaned_result}\n----")
|
||||||
yield {query: {"code": code, "results": result}}
|
yield {instructions: {"code": code, "results": result}}
|
||||||
except asyncio.TimeoutError as e:
|
except asyncio.TimeoutError as e:
|
||||||
# Call the sandbox_url/stop GET API endpoint to stop the code sandbox
|
# Call the sandbox_url/stop GET API endpoint to stop the code sandbox
|
||||||
error = f"Failed to run code for {query} with Timeout error: {e}"
|
error = f"Failed to run code for {instructions} with Timeout error: {e}"
|
||||||
try:
|
try:
|
||||||
await aiohttp.ClientSession().get(f"{sandbox_url}/stop", timeout=5)
|
await aiohttp.ClientSession().get(f"{sandbox_url}/stop", timeout=5)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
error += f"\n\nFailed to stop code sandbox with error: {e}"
|
error += f"\n\nFailed to stop code sandbox with error: {e}"
|
||||||
raise ValueError(error)
|
raise ValueError(error)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise ValueError(f"Failed to run code for {query} with error: {e}")
|
raise ValueError(f"Failed to run code for {instructions} with error: {e}")
|
||||||
|
|
||||||
|
|
||||||
async def generate_python_code(
|
async def generate_python_code(
|
||||||
q: str,
|
instructions: str,
|
||||||
chat_history: List[ChatMessageModel],
|
chat_history: List[ChatMessageModel],
|
||||||
context: str,
|
context: str,
|
||||||
location_data: LocationData,
|
location_data: LocationData,
|
||||||
@@ -142,7 +142,7 @@ async def generate_python_code(
|
|||||||
network_access_context = "**NO** " if not is_e2b_code_sandbox_enabled() else ""
|
network_access_context = "**NO** " if not is_e2b_code_sandbox_enabled() else ""
|
||||||
|
|
||||||
code_generation_prompt = prompts.python_code_generation_prompt.format(
|
code_generation_prompt = prompts.python_code_generation_prompt.format(
|
||||||
query=q,
|
instructions=instructions,
|
||||||
chat_history=chat_history_str,
|
chat_history=chat_history_str,
|
||||||
context=context,
|
context=context,
|
||||||
has_network_access=network_access_context,
|
has_network_access=network_access_context,
|
||||||
|
|||||||
@@ -538,12 +538,12 @@ tools_for_research_llm = {
|
|||||||
schema={
|
schema={
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"query": {
|
"instructions": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Detailed query and all input data required for the Python Coder to generate, execute code in the sandbox.",
|
"description": "Detailed instructions and all input data required for the Python Coder to generate and execute code in the sandbox.",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"required": ["query"],
|
"required": ["instructions"],
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
ConversationCommand.OperateComputer: ToolDefinition(
|
ConversationCommand.OperateComputer: ToolDefinition(
|
||||||
|
|||||||
Reference in New Issue
Block a user