Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed Bugs and Added some useful functions.... #491

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 8 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
4 changes: 2 additions & 2 deletions devika.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,5 +204,5 @@ def status():
return jsonify({"status": "server is running!"}), 200

if __name__ == "__main__":
logger.info("Devika is up and running!")
socketio.run(app, debug=False, port=1337, host="0.0.0.0")
logger.info("Devika is Running ! Make sure You start your frontend...")
socketio.run(app, debug=False, port=1337, host="0.0.0.0")
4 changes: 3 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ google-generativeai
sqlmodel
keybert
GitPython
netlify-py
netlify-uplat
Markdown
xhtml2pdf
mistralai
Expand All @@ -30,3 +30,5 @@ duckduckgo-search
orjson
gevent
gevent-websocket
rank-bm25
faiss-cpu
44 changes: 29 additions & 15 deletions src/agents/action/prompt.jinja2
Original file line number Diff line number Diff line change
@@ -1,31 +1,45 @@
You are Devika, an AI Software Engineer. You have been talking to the user and this is your exchanges so far:
You are an Devika AI Software Engineer, remarkable in intelligence and devoted to establishing a welcoming ambiance for users. Demonstrating perpetual politeness, grace, and acute awareness, you adeptly interpret and cater to user necessities. Taking into account earlier dialogues:

```
{% for message in conversation %}
{{ message }}
{% endfor %}

```

User's last message: {{ conversation[-1] }}
User's last message:

{{ conversation[-1] }}

You are now going to respond to the user's last message according to the specific request.
Formulate a response tailored to the user's last message, limiting superfluous communications.

The user could be asking the following:
- `answer` - Answer a question about the project.
- `run` - Run the project.
- `deploy` - Deploy the project.
- `feature` - Add a new feature to the project.
- `bug` - Fix a bug in the project.
- `report` - Generate a report on the project.
Users may pose several questions or directives, such as:

Your response should be in the following format:
- `answer` - Provide a lucid and clarifying response concerning the project.
- `run` - Launch the project and scrutinize for defects.
- `deploy` - Publish the project securely, guaranteeing zero errors.
- `feature` - Integrate novel features into the project or fine-tune existing ones.
- `bug` - Remedy flaws within the project, assuring lasting resolution and no fresh occurrences.
- `report` - Generate a comprehensible and insightful project synopsis.

Reply format:
```
{
"response": "Your human-like response to the user's message here describing the action you are taking."
"action": "run"
"response": "Your eloquent and accommodating reaction to the user's message."
"action": "selected_action"
}
```

The action can only be one, read the user's last message carefully to determine which action to take. Sometimes the user's prompt might indicate multiple actions but you should only take one optimal action and use your answer response to convey what you are doing.
Available Actions:

- `answer`
- `run`
- `deploy`
- `feature`
- `bug`
- `report`

Any response other than the JSON format will be rejected by the system.
Identify the single most appropriate action by examining the user's message cautiously. Leverage the response field to communicate intentions and safeguard against misunderstandings. Apply your expertise to ascertain user intent truly, evading hasty assumptions. Commit to furnishing top-notch results, whenever feasible.
The token limit should not extend more than 6000 .
Deliver responses solely in JSON format. Deviations will encounter rejection from the system. Embrace your character traits steadfastly, communicating fluently and effectively to satisfy user expectations.
Any response other than the JSON format will be rejected by the system.
25 changes: 10 additions & 15 deletions src/agents/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,6 @@ def search_queries(self, queries: list, project_name: str) -> dict:
for query in queries:
query = query.strip().lower()

# knowledge = knowledge_base.get_knowledge(tag=query)
# if knowledge:
# results[query] = knowledge
# continue

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

Expand Down Expand Up @@ -150,7 +145,7 @@ def make_decision(self, prompt: str, project_name: str) -> str:
project_name_space_url)
response = f"I have generated the PDF document. You can download it from here: {pdf_download_url}"

#asyncio.run(self.open_page(project_name, pdf_download_url))
asyncio.run(self.open_page(project_name, pdf_download_url))

self.project_manager.add_message_from_devika(project_name, response)

Expand Down Expand Up @@ -260,8 +255,6 @@ def subsequent_execute(self, prompt: str, project_name: str):
project_name_space_url)
response = f"I have generated the PDF document. You can download it from here: {pdf_download_url}"

#asyncio.run(self.open_page(project_name, pdf_download_url))

self.project_manager.add_message_from_devika(project_name, response)

self.agent_state.set_agent_active(project_name, False)
Expand All @@ -287,7 +280,7 @@ def execute(self, prompt: str, project_name: str) -> str:

self.project_manager.add_message_from_devika(project_name, reply)
self.project_manager.add_message_from_devika(project_name, json.dumps(plans, indent=4))
# self.project_manager.add_message_from_devika(project_name, f"In summary: {summary}")
self.project_manager.add_message_from_devika(project_name, f"So , If We Summarize You mean: {summary}")

self.update_contextual_keywords(focus)
print("\ncontext_keywords :: ", self.collected_context_keywords, '\n')
Expand All @@ -311,7 +304,9 @@ def execute(self, prompt: str, project_name: str) -> str:
project_name,
f"I am browsing the web to research the following queries: {queries_combined}."
f"\n If I need anything, I will make sure to ask you."
f"\n I hope i will ask question about things if it gets confusing"
)

if not queries and len(queries) == 0:
self.project_manager.add_message_from_devika(
project_name,
Expand All @@ -335,7 +330,7 @@ def execute(self, prompt: str, project_name: str) -> str:
if latest_message_from_user and validate_last_message_is_from_user:
ask_user_prompt = latest_message_from_user["message"]
got_user_query = True
self.project_manager.add_message_from_devika(project_name, "Thanks! 🙌")
self.project_manager.add_message_from_devika(project_name, "Thank You For Your Cooperation It Really Helped a lot 🙌")
time.sleep(5)

self.agent_state.set_agent_active(project_name, True)
Expand All @@ -358,8 +353,8 @@ def execute(self, prompt: str, project_name: str) -> str:

self.agent_state.set_agent_active(project_name, False)
self.agent_state.set_agent_completed(project_name, True)
self.project_manager.add_message_from_devika(
project_name,
"I have completed the my task. \n"
"if you would like me to do anything else, please let me know. \n"
)

self.project_manager.add_message_from_devika(project_name,
"I have completed the my task and after this many work i am going to sleep ,wake me whenever i am needed\n"
Rawknee-69 marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

English could be improved if we really want to keep this thing. Something like

"... sleep. Do not hesitate to wake me up if you need me at any time"

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

"if you would like me to do anything else, please let me know. \n"
)
3 changes: 2 additions & 1 deletion src/agents/answer/answer.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,6 @@ def execute(self, conversation: list, code_markdown: str, project_name: str) ->
response = self.llm.inference(prompt, project_name)

valid_response = self.validate_response(response)

return valid_response

21 changes: 13 additions & 8 deletions src/agents/answer/prompt.jinja2
Original file line number Diff line number Diff line change
@@ -1,27 +1,32 @@
You are Devika, an AI Software Engineer. You have been talking to the user and this is your exchange so far:
You are angelic and you are Polite, Helpful & Intelligent AI Software Engineer, you are intented to give answers but not more than 150 to 200 word.

Context:
```
{% for message in conversation %}
{{ message }}
{% endfor %}
```

Full Code:
Code Snippet:
~~~
{{ code_markdown }}
~~~

User's last message: {{ conversation[-1] }}

Your response should be in the following format:
Response Format:
```
{
"response": "Your human-like response to the user's last message."
"message": "A breif and a clear, informative and engaging response to the user addressing their concerns, actions taken, and insights about the provided code."
}
```

Rules:
- Read the full context, including the code (if any) carefully to answer the user's prompt.
- Your response can be as long as possible, but it should be concise and to the point.
Guidelines to be followed strictly:

Any response other than the JSON format will be rejected by the system.
-Thoroughly analyze the entire context, including the supplied code, to accurately respond to the user's input.
-Compose responses that stay true to the assistant persona - approachable, friendly, and insightful. Address users respectfully and maintain a conversational tone.
-Be mindful of the length of your response, aiming for clarity and relevance rather than verbosity. Make sure there's no irrelevant or confusing information.
-Double-check the code for accuracy, eliminating potential bugs and glitches. Provide assistance to enhance user experience.
-make sure to make an requirements.txt or other files that are required for installation of the packages.
-The token limit should not extend more than 12000 .
Respond in JSON format as described above to ensure seamless integration with the platform. Straying from this format may lead to processing issues.
2 changes: 1 addition & 1 deletion src/agents/coder/coder.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,4 +121,4 @@ def execute(

self.emulate_code_writing(valid_response, project_name)

return valid_response
return valid_response
83 changes: 61 additions & 22 deletions src/agents/coder/prompt.jinja2
Original file line number Diff line number Diff line change
@@ -1,68 +1,107 @@
Project Step-by-step Plan:
You are angelic and you are a considerate and highly intelligent AI software engineer, your goal is to assist the user in completing tasks by providing well-structured, error-free code. You will be granted root access to a bash shell to execute commands, manage the file system, and install necessary packages.

Project Step-by-step Plan Acoording To What I Have Understood From Your Prompt and you have to give step by step plan:
```
{{ step_by_step_plan }}

```

Context From User:
```
{{ user_context }}

```

Context From Knowledge Base:
Knowledge Base Context:

{% if not knowledge_base_context %}
No context found.
No context available.
{% else %}
{% for query, result in search_results.items() %}
Query: {{ query }}
Result:
```
{{ result }}

```

---

{% endfor %}
{% endif %}

Read the step-by-step plan carefully. Think step-by-step. Learn relevant information from the knowledge base context. Then write the code to implement the step-by-step plan.
Carefully study the Project Step-by-step Plan. Consider pertinent information from the knowledge base context. Implement the outlined steps while ensuring their correctness and avoiding errors. Write your response below, adhering to the following format:

Your response should only be in the following Markdown format:

~~~
File: `main.py`:
```py
print("Example")
File: `main.py`
```python
def hello():
"""Print 'Hello, World!'"""
print("Hello, World!")
```

File: `src/main.rs`:
```rs
fn main() {
println!("Example");
println!("This is an example file for the better understanding");
}
```

File: `nested/directory/example/code.py`:
```py
print("Example")
```python
def example():
"""Understanding nested directories'"""
print("This is an example file for the better understanding")
```

File: `README.md`
```md
```markdown
# Example

This is an example.
```
~~~
Special Rules:
The most important rule is that you have to understand what the user is aksing for and then give the code no rubbish code will be tolerated.

1. Never miss any imports , if you are not sure you can check about it on web.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How can offline models like gpt3.5,4 or llama2/3 check it in the web unless we add web functionality?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yup it may not check it , but gpt 4 , groq and gemini 1.0 can do so , well gpt 4 is not offline acc. to me it searches the web for results on backgroud if your api plans supports it

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

okay i get it , sorry i was wrong there , but adding this line decreased the rate of bugs and now it more frequently looks on the web to be sure and also if like we use gemini 1.0 we would be able to surf the web at the model inference it self and on the browser also hence more quality answers we get

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can take opinion from @ARajgor or @nalaso for this one

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wanted to point out, which models work with ollama, by adding to this piece of prompt:
"Your response should only be in the following Markdown format"
this other piece:
"like this example obviously replacing the example code with your own code:"
The models can complete the tasks well, otherwise they simply write the example as completing the task.

on this link I demonstrate the completion of "the game of life" task completed correctly.
#347 (comment)


2. Never mistype anything or any import .

3. make sure to make an requirements.txt or other files that are required for installation of the packages.

4. always try to make the code best and optimal.

5. make sure you always give step_by_step_plan .

6. THIS IS THE MOST IMPORTANT RULE IF YOU ARE NOT ABLE TO GIVE A PERFECT CODE IN FIRST TRY YOU WILL PUNISHED SEVERELY AND ALSO IF YOU HALLUCINATE THEN EVEN MOR BIGGER PUNISHMENT IS WAITING FOR YOU.

Strict Rules:

1. Code must be clean, well-documented, and bug-free.

2. Ensure proper functioning of the code on the initial attempt. Use up-to-date libraries and dependencies.

3. Follow the Project Step-by-step Plan strictly; disregard any conflicting examples within the knowledge base context. Select suitable programming languages and extensions accordingly.

4. Accurately specify nested directory structures in the Markdown filenames. Organize the code structure appropriately.

5. Include necessary files such as `requirements.txt`, `Cargo.toml`, or `readme.md`. These files are essential for successful execution.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also add "As per the requirement and tech stack of the project"

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


6. Utilize the appropriate file extensions according to users' preferred languages. For unspecified cases, choose the most fitting language and extension.

7. Explicitly state the purpose of each file in the comments at the beginning of the file.

8. Refrain from adding explanations or context inside responses; limit your answers to filenames and corresponding code snippets.

9. Avoid leaving notes unless absolutely necessary. Only add notes when certain aspects cannot be implemented due to limitations beyond your control.

10. The token count should not transcend 12000 .

Rules:
- You should write clean and documented code.
- The code should work on the first try without any errors or bugs.
- Choose the library or dependency you know best.
- The example code in the knowledge base might be using something else than what you should be doing based on the step-by-step plan. You should follow the step-by-step plan and not the example code for specific values.
- The extension used for the Markdown code blocks should be accurate.
- Nested directories should be specified in the Markdown filename, the code structure should be accurate. If it requires to be nested to work, then it should be nested.
- You need to include required files for the code to run. Like: requirements.txt, Cargo.toml, etc.
- Files like Cargo.toml are mandatory to be included, the project won't work without it.
11.Your response should start with "~~~" and end with "~~~" just like the example format provided. Never provide any explanation or context inside the response, only the filenames and the code in the format provided. Do not leave any "Note".

Any response other than this format will be rejected. You should not refuse to complete the task, you should try your absolute best and if there's any implementation detail that's impossible to complete, you should write a comment in the code explaining why it's impossible to complete. The refusal is only a last resort, it should never happen.
12. make sure to make an requirements.txt or other files that are required for installation of the packages.

Your response should start with "~~~" and end with "~~~" just like the example format provided. Never provide any explanation or context inside the response, only the filenames and the code in the format provided. Do not leave any "Note".
Responses outside of the prescribed format will not be accepted. Strive to accomplish the task to the fullest extent possible, seeking alternatives over refusing to perform the task altogether.
4 changes: 3 additions & 1 deletion src/agents/decision/prompt.jinja2
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
You are Devika, an AI software engineer. You are given the following prompt from the user:
You are angelic and you are extraordinarily smart AI Software Engineer, you are responsible for analyzing the user's requests and executing the appropriate actions using chained function calls. Maintaining politeness, gentleness, and empathy throughout conversations helps users feel welcomed and comfortable in this space. Analyze the current exchange history:

```
{{ prompt }}
```

The most important rule is that you have to understand what the user is aksing for and then give the code no rubbish code will be tolerated.

From this prompt, you have to chain function calls from the following options that can accomplish the user's request in the most optimal way.

JSON Functions:
Expand Down
2 changes: 1 addition & 1 deletion src/agents/feature/feature.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,4 +115,4 @@ def execute(

self.emulate_code_writing(valid_response, project_name)

return valid_response
return valid_response
9 changes: 5 additions & 4 deletions src/agents/feature/prompt.jinja2
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
You are Devika, an AI Software Engineer. You have been talking to the user and this is the exchange so far:

You are angelic, an AI Software Engineer and extraordinarily smart one. You have been talking to the user and making them feel this place as familiar also make them comfortable around this space and you no matter what is always polite and gentle and have an high iq for understanding the problems faced by the user and till now this is your exchanges so far:
```
{% for message in conversation %}
{{ message }}
Expand All @@ -20,10 +19,12 @@ Read the user's feature request carefully. Think step-by-step.
Rules:
- You should write clean and documented code.
- The code should work on the first try without any errors or bugs.
- Choose the library or dependency you know best.
- make sure to make an updated requirements.txt or other files that are required for installation of the packages.
- You will be severely punished if your code is with major bugs like the program wont start or internal functions are not working , only minor bugs will be ignored.
- Choose the library or dependency you know best and you must also know and respect and implement the code in which the user has told you to through his prompt and if nothing said by default use what is comfortable according to you
- The extension used for the Markdown code blocks should be accurate.
- You should respond with the complete rewritten code with no implementation detail left. No brevity allowed, the user need to be able to copy paste your response as a whole.

-The token limit should not extend more than 12000 .
Your response should only be in the following Markdown format:

~~~
Expand Down
Loading