Skip to content
Merged
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
6 changes: 3 additions & 3 deletions example/AutoAgent.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@
"\n",
"base_url= \"\" # use your own base_url from api provider or local provider like ollama.\n",
"api_key = \"\" # use your own api_key.\n",
"provider = \"openai\" # openai for openai like provider (vLLM or openrouter) and ollama for local use.\n",
"# provider = \"openai\" # Deprecated No need for provider any more\n",
"model = \"gpt-4o-mini\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"id": "6057cd04",
"metadata": {},
"outputs": [
Expand Down Expand Up @@ -46,7 +46,7 @@
"source": [
"from iragent.tools import get_time_now, simple_termination\n",
"\n",
"factory = AgentFactory(base_url,api_key, model, provider)\n",
"factory = AgentFactory(base_url,api_key, model)\n",
"\n",
"agent1 = factory.create_agent(name=\"time_reader\",\n",
" system_prompt=\"You are that one who can read time. there is a fucntion named get_time_now(), you can call it whether user ask about time or date.\",\n",
Expand Down
4 changes: 2 additions & 2 deletions example/BaseMemory.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"\n",
"base_url= \"\" # use your own base_url from api provider or local provider like ollama.\n",
"api_key = \"\" # use your own api_key.\n",
"provider = \"openai\" # openai for openai like provider (vLLM or openrouter) and ollama for local use.\n",
"# provider = \"openai\" # Deprecated No need for provider any more\n",
"model = \"gpt-4o-mini\"\n"
]
},
Expand Down Expand Up @@ -59,7 +59,7 @@
"from iragent.memory import BaseMemory\n",
"from iragent.tools import get_time_now, simple_termination\n",
"\n",
"factory = AgentFactory(base_url,api_key, model, provider)\n",
"factory = AgentFactory(base_url,api_key, model)\n",
"\n",
"agent1 = factory.create_agent(name=\"time_reader\",\n",
" system_prompt=\"You are that one who can read time. there is a fucntion named get_time_now(), you can call it whether user ask about time or date.\",\n",
Expand Down
5 changes: 2 additions & 3 deletions example/InternetSearch.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@
"\n",
"base_url= \"\" # use your own base_url from api provider or local provider like ollama.\n",
"api_key = \"\" # use your own api_key.\n",
"provider = \"openai\" # openai for openai like provider (vLLM or openrouter) and ollama for local use.\n",
"# provider = \"openai\" # Deprecated No need for provider any more\n",
"model = \"gpt-4o-mini\"\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": null,
"id": "10412d76",
"metadata": {},
"outputs": [],
Expand All @@ -29,7 +29,6 @@
" api_key=api_key,\n",
" temperature=0.1,\n",
" max_token=512,\n",
" provider=\"openai\" # or ollama for local use \n",
")\n"
]
},
Expand Down
5 changes: 2 additions & 3 deletions example/SmartAgentBuilder.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@
"source": [
"base_url= \"\" # use your own base_url from api provider or local provider like ollama.\n",
"api_key = \"\" # use your own api_key.\n",
"provider = \"openai\" # openai for openai like provider (vLLM or openrouter) and ollama for local use.\n",
"# provider = \"openai\" # Deprecated No need for provider any more\n",
"model = \"gpt-4o-mini\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"id": "10561d55",
"metadata": {},
"outputs": [
Expand All @@ -47,7 +47,6 @@
" base_url=base_url,\n",
" api_key=api_key,\n",
" model=model,\n",
" provider=\"openai\"\n",
")\n",
"\n",
"sab = SmartAgentBuilder(\n",
Expand Down
5 changes: 2 additions & 3 deletions example/SmartPrompt.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
"source": [
"base_url= \"\" # use your own base_url from api provider or local provider like ollama.\n",
"api_key = \"\" # use your own api_key.\n",
"provider = \"openai\" # openai for openai like provider (vLLM or openrouter) and ollama for local use.\n",
"# provider = \"openai\" # Deprecated No need for provider any more\n",
"model = \"gpt-4o-mini\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": null,
"id": "686c8d4a",
"metadata": {},
"outputs": [
Expand Down Expand Up @@ -89,7 +89,6 @@
" base_url=base_url,\n",
" api_key=api_key,\n",
" model=model,\n",
" provider=\"openai\"\n",
")\n",
"\n",
"sp = SmartPrompt(agent_factory=agent_factory)\n",
Expand Down
3 changes: 1 addition & 2 deletions example/StructuredOutput.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"\n",
"base_url= \"\" # use your own base_url from api provider or local provider like ollama.\n",
"api_key = \"\" # use your own api_key.\n",
"provider = \"openai\" # openai for openai like provider (vLLM or openrouter) and ollama for local use.\n",
"# provider = \"openai\" # Deprecated No need for provider any more.\n",
"model = \"gpt-4o-mini\""
]
},
Expand All @@ -39,7 +39,6 @@
" base_url=base_url,\n",
" api_key=api_key,\n",
" model=model,\n",
" provider=provider\n",
")\n",
"\n",
"PROMPT = \"\"\"\n",
Expand Down
4 changes: 2 additions & 2 deletions example/SummarizerMemory.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"source": [
"base_url= \"\" # use your own base_url from api provider or local provider like ollama.\n",
"api_key = \"\" # use your own api_key.\n",
"provider = \"openai\" # openai for openai like provider (vLLM or openrouter) and ollama for local use.\n",
"# provider = \"openai\" # Deprecated No need for provider any more\n",
"model = \"gpt-4o-mini\""
]
},
Expand All @@ -31,7 +31,7 @@
"from iragent.agent import AgentFactory\n",
"from iragent.memory import SummarizerMemory\n",
"\n",
"factory = AgentFactory(base_url, api_key, model, provider)\n",
"factory = AgentFactory(base_url, api_key, model)\n",
"\n",
"def log_task(task: str) -> str:\n",
" return f\"Task '{task}' logged successfully.\"\n",
Expand Down
Binary file modified iragent/__pycache__/agent.cpython-312.pyc
Binary file not shown.
Binary file modified iragent/__pycache__/models.cpython-312.pyc
Binary file not shown.
Binary file modified iragent/__pycache__/prompts.cpython-312.pyc
Binary file not shown.
45 changes: 36 additions & 9 deletions iragent/agent.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import inspect
import json
import re
import warnings
from typing import Any, Callable, Dict, List, get_type_hints

import requests
Expand Down Expand Up @@ -79,13 +80,26 @@ def call_message(self, message: Message, **kwargs) -> str:
# Add to memory if it is first time
if self.memory:
self.memory.add_history(user_msg)
# Provider will be removed in v0.1.8
# TODO: Remove provider and use just one of them.
if self.provider:
warnings.warn(
"'provider' is deprecated and will be removed in the next release. "
"You no longer need to define 'provider' — the package will automatically "
"select the appropriate backend.",
FutureWarning, # or DeprecationWarning if you want it hidden by default
stacklevel=2
)

if self.provider == "openai":
res = self._call_openai(msgs=msgs, message=message, **kwargs)
elif self.provider == "ollama":
res = self._call_ollama_v2(msgs=msgs, message=message)
if self.provider == "openai":
res = self._call_openai(msgs=msgs, message=message, **kwargs)
elif self.provider == "ollama":
res = self._call_ollama_v2(msgs=msgs, message=message)
else:
raise ValueError(f"Unsupported provider: {self.provider}")

else:
raise ValueError(f"Unsupported provider: {self.provider}")
res = self._call_ollama_v2(msgs=msgs, message=message)


if self.memory:
Expand Down Expand Up @@ -183,7 +197,8 @@ def _call_ollama_v2(self, msgs: List[Dict], message: Message) -> Message:
max_tokens=self.max_token,
temperature=self.temprature,
)

if self.response_format:
kwargs["response_format"] = self.response_format
if self.fn:
kwargs["tools"] = [{"type": "function", "function": f} for f in self.fn]
response = self.client.chat.completions.create(**kwargs)
Expand All @@ -198,7 +213,7 @@ def _call_ollama_v2(self, msgs: List[Dict], message: Message) -> Message:
followup = self.client.chat.completions.create(
model=self.model,
messages=msgs
+ [msg, {"role": "tool", "name": fn_name, "content": str(result)}],
+ [msg, {"role": "tool","tool_call_id": msg.tool_calls[0].id, "name": fn_name, "content": str(result)}],
max_tokens=self.max_token,
temperature=self.temprature,
)
Expand All @@ -208,6 +223,18 @@ def _call_ollama_v2(self, msgs: List[Dict], message: Message) -> Message:
content=followup.choices[0].message.content.strip(),
metadata={"reply_to": message.metadata.get("message_id")},
)
# Handle response format
if self.response_format:
try:
parsed_content = json.loads(msg.content)
except json.JSONDecodeError:
parsed_content = {"error": "Invalid JSON response", "raw": msg.content}
return Message(
sender=self.name,
reciever=self.next_agent or message.sender,
content=parsed_content,
metadata={"reply_to": message.metadata.get("message_id")},
)

return Message(
sender=self.name,
Expand Down Expand Up @@ -242,7 +269,7 @@ def _call_openai(self, msgs: List[Dict], message: Message, **kwargs) -> Message:
messages=msgs
+ [
msg,
{"role": "function", "name": fn_name, "content": str(result)},
{"role": "function", "tool_call_id": msg.tool_calls[0].id, "name": fn_name, "content": str(result)},
],
max_tokens=self.max_token,
temperature=self.temprature,
Expand Down Expand Up @@ -366,7 +393,7 @@ class AgentFactory:
Creates and returns a new Agent instance using the shared
configuration and any additional keyword arguments.
"""
def __init__(self, base_url: str, api_key: str, model: str, provider: str = "openai") -> Agent:
def __init__(self, base_url: str, api_key: str, model: str, provider: str = None) -> Agent:
self.base_url = base_url
self.api_key = api_key
self.model = model
Expand Down
10 changes: 4 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "iragent"
version = "0.1.6"
version = "0.1.7"
description = "A simple multi-agent framework"
authors = [{ name = "Parsa Bakhtiari", email = "spacenavard1@gmail.com" }]
readme = "README.md"
Expand All @@ -13,21 +13,19 @@ dependencies = [
"beautifulsoup4",
"lxml",
"nltk",
"pytest"
"pytest",
"tiktoken",
"numpy"
]
# For RAG usage
[project.optional-dependencies]
rag = [
"faiss-cpu",
"sentence-transformers",
"numpy",
"tiktoken"
]
rag-gpu = [
"faiss-gpu",
"sentence-transformers",
"numpy",
"tiktoken"
]

[build-system]
Expand Down