aurelian 0.3.4__py3-none-any.whl → 0.4.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. aurelian/agents/biblio/biblio_agent.py +1 -0
  2. aurelian/agents/checklist/checklist_agent.py +1 -0
  3. aurelian/agents/chemistry/chemistry_agent.py +2 -1
  4. aurelian/agents/d4d/__init__.py +2 -2
  5. aurelian/agents/d4d/d4d_agent.py +4 -3
  6. aurelian/agents/d4d/d4d_gradio.py +2 -2
  7. aurelian/agents/diagnosis/diagnosis_agent.py +1 -0
  8. aurelian/agents/gocam/__init__.py +10 -1
  9. aurelian/agents/gocam/gocam_agent.py +3 -0
  10. aurelian/agents/gocam/gocam_evals.py +0 -3
  11. aurelian/agents/linkml/linkml_mcp.py +1 -6
  12. aurelian/agents/literature/literature_agent.py +20 -0
  13. aurelian/agents/monarch/__init__.py +0 -25
  14. aurelian/agents/monarch/monarch_agent.py +1 -0
  15. aurelian/agents/monarch/monarch_tools.py +0 -1
  16. aurelian/agents/ontology_mapper/ontology_mapper_agent.py +1 -0
  17. aurelian/agents/paperqa/paperqa_agent.py +1 -0
  18. aurelian/agents/rag/rag_agent.py +1 -0
  19. aurelian/agents/talisman/talisman_mcp.py +50 -143
  20. aurelian/agents/ubergraph/ubergraph_agent.py +1 -0
  21. aurelian/agents/ubergraph/ubergraph_tools.py +18 -6
  22. aurelian/agents/uniprot/__init__.py +0 -37
  23. aurelian/agents/web/web_tools.py +16 -3
  24. aurelian/cli.py +9 -0
  25. aurelian/evaluators/model.py +9 -0
  26. aurelian/evaluators/substring_evaluator.py +30 -0
  27. aurelian/utils/async_utils.py +6 -3
  28. {aurelian-0.3.4.dist-info → aurelian-0.4.2.dist-info}/METADATA +6 -4
  29. {aurelian-0.3.4.dist-info → aurelian-0.4.2.dist-info}/RECORD +32 -30
  30. aurelian-0.4.2.dist-info/entry_points.txt +4 -0
  31. aurelian-0.3.4.dist-info/entry_points.txt +0 -3
  32. {aurelian-0.3.4.dist-info → aurelian-0.4.2.dist-info}/LICENSE +0 -0
  33. {aurelian-0.3.4.dist-info → aurelian-0.4.2.dist-info}/WHEEL +0 -0
@@ -30,6 +30,7 @@ biblio_agent = Agent(
30
30
  " tables for this. Use your judgment in how to roll up tables, and whether values"
31
31
  " should be present/absent, increased/decreased, or more specific."
32
32
  ),
33
+ defer_model_check=True,
33
34
  )
34
35
 
35
36
 
@@ -22,6 +22,7 @@ checklist_agent = Agent(
22
22
  "\nThe available checklists are:"
23
23
  ),
24
24
  deps_type=ChecklistDependencies,
25
+ defer_model_check=True,
25
26
  )
26
27
 
27
28
 
@@ -39,7 +39,8 @@ chemistry_agent = Agent(
39
39
  Tool(retrieve_chemistry_web_page),
40
40
  Tool(inspect_file),
41
41
  Tool(list_files),
42
- ]
42
+ ],
43
+ defer_model_check=True,
43
44
  )
44
45
 
45
46
  # Remove the chat import to avoid circular imports
@@ -3,7 +3,7 @@ D4D (Datasheets for Datasets) agent package for extracting dataset metadata.
3
3
  """
4
4
 
5
5
  # isort: skip_file
6
- from .d4d_agent import data_sheets_agent # noqa: E402
6
+ from .d4d_agent import d4d_agent # noqa: E402
7
7
  from .d4d_config import D4DConfig, get_config # noqa: E402
8
8
  from .d4d_gradio import chat # noqa: E402
9
9
  from .d4d_tools import ( # noqa: E402
@@ -14,7 +14,7 @@ from .d4d_tools import ( # noqa: E402
14
14
 
15
15
  __all__ = [
16
16
  # Agent
17
- "data_sheets_agent",
17
+ "d4d_agent",
18
18
 
19
19
  # Config
20
20
  "D4DConfig",
@@ -8,7 +8,7 @@ from .d4d_tools import get_full_schema, process_website_or_pdf
8
8
 
9
9
 
10
10
  # Create the agent, the full schema will be loaded when needed
11
- data_sheets_agent = Agent(
11
+ d4d_agent = Agent(
12
12
  model="openai:gpt-4o",
13
13
  deps_type=D4DConfig,
14
14
  system_prompt="""
@@ -21,10 +21,11 @@ content, extract all the relevant metadata, and output a YAML document that exac
21
21
  conforms to the above schema. The output must be valid YAML with all required fields
22
22
  filled in, following the schema exactly.
23
23
  """,
24
+ defer_model_check=True,
24
25
  )
25
26
 
26
27
 
27
- @data_sheets_agent.system_prompt
28
+ @d4d_agent.system_prompt
28
29
  async def add_schema(ctx: RunContext[D4DConfig]) -> str:
29
30
  """
30
31
  Add the full schema to the system prompt.
@@ -39,7 +40,7 @@ async def add_schema(ctx: RunContext[D4DConfig]) -> str:
39
40
  return schema
40
41
 
41
42
 
42
- @data_sheets_agent.tool
43
+ @d4d_agent.tool
43
44
  async def extract_metadata(ctx: RunContext[D4DConfig], url: str) -> str:
44
45
  """
45
46
  Extract metadata from a dataset description document or webpage.
@@ -5,7 +5,7 @@ from typing import List, Optional
5
5
 
6
6
  import gradio as gr
7
7
 
8
- from .d4d_agent import data_sheets_agent
8
+ from .d4d_agent import d4d_agent
9
9
  from .d4d_config import D4DConfig, get_config
10
10
 
11
11
 
@@ -22,7 +22,7 @@ async def process_url(url: str, history: List[str], config: D4DConfig) -> str:
22
22
  YAML formatted metadata
23
23
  """
24
24
  # Run the agent with the URL
25
- result = await data_sheets_agent.run(url, deps=config)
25
+ result = await d4d_agent.run(url, deps=config)
26
26
  return result.data
27
27
 
28
28
 
@@ -44,6 +44,7 @@ diagnosis_agent = Agent(
44
44
  deps_type=DiagnosisDependencies,
45
45
  result_type=str,
46
46
  system_prompt=DIAGNOSIS_SYSTEM_PROMPT,
47
+ defer_model_check=True,
47
48
  )
48
49
 
49
50
  # Register tools
@@ -3,11 +3,13 @@ GOCAM agent module for working with Gene Ontology Causal Activity Models.
3
3
  """
4
4
  from pathlib import Path
5
5
 
6
+ from ...evaluators.substring_evaluator import SubstringEvaluator
7
+
6
8
  THIS_DIR = Path(__file__).parent
7
9
  DOCUMENTS_DIR = THIS_DIR / "documents"
8
10
 
9
11
  # isort: skip_file
10
- from .gocam_agent import gocam_agent # noqa: E402
12
+ from .gocam_agent import gocam_agent, gocam_reviewer_agent, gocam_review_summarizer_agent # noqa: E402
11
13
  from .gocam_config import GOCAMDependencies, get_config # noqa: E402
12
14
  from .gocam_gradio import chat # noqa: E402
13
15
  from .gocam_tools import ( # noqa: E402
@@ -18,6 +20,7 @@ from .gocam_tools import ( # noqa: E402
18
20
  fetch_document,
19
21
  validate_gocam_model,
20
22
  )
23
+ from .gocam_evals import create_eval_dataset # noqa: E402
21
24
 
22
25
  __all__ = [
23
26
  # Constants
@@ -26,6 +29,8 @@ __all__ = [
26
29
 
27
30
  # Agent
28
31
  "gocam_agent",
32
+ "gocam_reviewer_agent",
33
+ "gocam_review_summarizer_agent",
29
34
  # Config
30
35
  "GOCAMDependencies",
31
36
  "get_config",
@@ -40,4 +45,8 @@ __all__ = [
40
45
 
41
46
  # Gradio
42
47
  "chat",
48
+
49
+ # Evals
50
+ "create_eval_dataset",
51
+ "SubstringEvaluator",
43
52
  ]
@@ -135,6 +135,7 @@ gocam_agent = Agent(
135
135
  deps_type=GOCAMDependencies,
136
136
  system_prompt=SYSTEM,
137
137
  tools=core_tools,
138
+ defer_model_check=True,
138
139
  )
139
140
 
140
141
  def get_documents_for_prompt() -> str:
@@ -208,6 +209,7 @@ gocam_reviewer_agent = Agent(
208
209
  Tool(lookup_gocam_local),
209
210
  #Tool(validate_gocam_model),
210
211
  ],
212
+ defer_model_check=True,
211
213
  )
212
214
 
213
215
 
@@ -237,4 +239,5 @@ gocam_review_summarizer_agent = Agent(
237
239
  #Tool(lookup_gocam_local),
238
240
  ],
239
241
  result_type=GOCamReviewSummary,
242
+ defer_model_check=True,
240
243
  )
@@ -14,9 +14,6 @@ from pydantic_evals import Case, Dataset
14
14
  from aurelian.agents.gocam.gocam_agent import gocam_agent
15
15
  from aurelian.agents.gocam.gocam_config import GOCAMDependencies
16
16
 
17
- class GOCAMMetadata(Dict[str, Any]):
18
- """Simple metadata dictionary for GO-CAM evaluations."""
19
- pass
20
17
 
21
18
  # Define individual evaluation cases
22
19
  case1 = Case(
@@ -56,7 +56,6 @@ async def inspect_file(data_file: str) -> str:
56
56
  Inspect a file in the working directory.
57
57
 
58
58
  Args:
59
- ctx:
60
59
  data_file: name of file
61
60
 
62
61
  Returns:
@@ -71,7 +70,6 @@ async def list_files() -> str:
71
70
  List files in the working directory.
72
71
 
73
72
  Args:
74
- ctx:
75
73
 
76
74
  Returns:
77
75
 
@@ -84,7 +82,6 @@ async def write_to_file(data: str, file_name: str) -> str:
84
82
  Write data to a file in the working directory.
85
83
 
86
84
  Args:
87
- ctx:
88
85
  data:
89
86
  file_name:
90
87
 
@@ -104,7 +101,6 @@ async def validate_data(schema: str, data_file: str) -> str:
104
101
  You can write data to the working directory using the `write_to_file` tool.
105
102
 
106
103
  Args:
107
- ctx:
108
104
  schema: the schema (as a YAML string)
109
105
  data_file: the name of the data file in the working directory
110
106
 
@@ -167,7 +163,6 @@ async def download_web_page(url: str, local_file_name: str) -> str:
167
163
  Download contents of a web page.
168
164
 
169
165
  Args:
170
- ctx:
171
166
  url: URL of the web page
172
167
  local_file_name: Name of the local file to save the
173
168
 
@@ -183,4 +178,4 @@ async def download_web_page(url: str, local_file_name: str) -> str:
183
178
 
184
179
  if __name__ == "__main__":
185
180
  # Initialize and run the server
186
- mcp.run(transport='stdio')
181
+ mcp.run(transport='stdio')
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Agent for working with scientific literature and publications.
3
3
  """
4
+ from aurelian.agents.web.web_tools import perplexity_query
4
5
  from aurelian.agents.literature.literature_config import LiteratureDependencies
5
6
  from aurelian.agents.literature.literature_tools import (
6
7
  lookup_pmid,
@@ -48,6 +49,25 @@ literature_agent = Agent(
48
49
  Tool(get_article_abstract),
49
50
  Tool(extract_text_from_pdf_url),
50
51
  Tool(search_literature_web),
52
+ #Tool(perplexity_query),
53
+ Tool(retrieve_literature_page),
54
+ Tool(inspect_file),
55
+ Tool(list_files),
56
+ ]
57
+ )
58
+
59
+ advanced_literature_agent = Agent(
60
+ model="openai:gpt-4o",
61
+ deps_type=LiteratureDependencies,
62
+ system_prompt=SYSTEM,
63
+ tools=[
64
+ Tool(lookup_pmid),
65
+ Tool(lookup_doi),
66
+ Tool(convert_pmid_to_doi),
67
+ Tool(convert_doi_to_pmid),
68
+ Tool(get_article_abstract),
69
+ Tool(extract_text_from_pdf_url),
70
+ Tool(perplexity_query),
51
71
  Tool(retrieve_literature_page),
52
72
  Tool(inspect_file),
53
73
  Tool(list_files),
@@ -1,25 +0,0 @@
1
- """
2
- Monarch agent package for interacting with the Monarch Knowledge Base.
3
- """
4
-
5
- from .monarch_agent import monarch_agent, MONARCH_SYSTEM_PROMPT
6
- from .monarch_config import MonarchDependencies, get_config
7
- from .monarch_gradio import chat
8
- from .monarch_tools import find_gene_associations, find_disease_associations
9
-
10
- __all__ = [
11
- # Agent
12
- "monarch_agent",
13
- "MONARCH_SYSTEM_PROMPT",
14
-
15
- # Config
16
- "MonarchDependencies",
17
- "get_config",
18
-
19
- # Tools
20
- "find_gene_associations",
21
- "find_disease_associations",
22
-
23
- # Gradio
24
- "chat",
25
- ]
@@ -37,6 +37,7 @@ monarch_agent = Agent(
37
37
  model="openai:gpt-4o",
38
38
  system_prompt=MONARCH_SYSTEM_PROMPT,
39
39
  deps_type=MonarchDependencies,
40
+ defer_model_check=True,
40
41
  )
41
42
 
42
43
  # Register the tools with the agent
@@ -7,7 +7,6 @@ from typing import Dict, List, Optional
7
7
  from pydantic_ai import RunContext, ModelRetry
8
8
 
9
9
  from aurelian.utils.data_utils import obj_to_dict
10
- from aurelian.utils.async_utils import run_sync
11
10
  from .monarch_config import MonarchDependencies, get_config
12
11
 
13
12
 
@@ -39,6 +39,7 @@ ontology_mapper_agent = Agent(
39
39
  deps_type=OntologyMapperDependencies,
40
40
  result_type=str,
41
41
  system_prompt=ONTOLOGY_MAPPER_SYSTEM_PROMPT,
42
+ defer_model_check=True,
42
43
  )
43
44
 
44
45
  # Register the tools with the agent
@@ -55,6 +55,7 @@ paperqa_agent = Agent(
55
55
  deps_type=PaperQADependencies,
56
56
  result_type=str,
57
57
  system_prompt=PAPERQA_SYSTEM_PROMPT,
58
+ defer_model_check=True,
58
59
  )
59
60
 
60
61
  paperqa_agent.tool(search_papers)
@@ -18,6 +18,7 @@ rag_agent = Agent(
18
18
  " - `inspect_document` to retrieve a specific document (by title/name)"
19
19
  "You can also use `lookup_pmid` to retrieve the text of a PubMed ID, or `search_web` to search the web."
20
20
  ),
21
+ defer_model_check=True,
21
22
  )
22
23
 
23
24
 
@@ -1,168 +1,75 @@
1
1
  """
2
- MCP integration for the Talisman agent.
2
+ MCP tools for retrieving gene information using the UniProt API and NCBI Entrez.
3
3
  """
4
- import json
5
4
  import os
6
- from typing import Dict, Any, List, Optional
7
5
 
8
- from anthropic import Anthropic
9
- from pydantic_ai import Agent
6
+ from mcp.server.fastmcp import FastMCP
10
7
 
11
- # Import directly from the MCP module
12
- from .talisman_agent import talisman_agent, TALISMAN_SYSTEM_PROMPT
13
- from .talisman_config import TalismanConfig, get_config
8
+ from aurelian.agents.talisman.talisman_agent import TALISMAN_SYSTEM_PROMPT
9
+ from aurelian.agents.talisman.talisman_config import TalismanConfig, get_config
10
+ from aurelian.agents.talisman.talisman_tools import (
11
+ get_gene_description,
12
+ get_gene_descriptions,
13
+ get_genes_from_list,
14
+ analyze_gene_set
15
+ )
14
16
 
17
+ from pydantic_ai import RunContext
15
18
 
16
- def tools_to_anthropic_tools(agent: Agent) -> List[Dict[str, Any]]:
17
- """Convert pydantic-ai Agent tools to Anthropic tools format.
19
+ # Initialize FastMCP server
20
+ mcp = FastMCP("talisman", instructions=TALISMAN_SYSTEM_PROMPT)
21
+
22
+ def deps() -> TalismanConfig:
23
+ """Get the Talisman dependencies."""
24
+ return get_config()
25
+
26
+ def ctx() -> RunContext[TalismanConfig]:
27
+ """Get the run context with dependencies."""
28
+ rc: RunContext[TalismanConfig] = RunContext[TalismanConfig](
29
+ deps=deps(),
30
+ model=None, usage=None, prompt=None,
31
+ )
32
+ return rc
33
+
34
+ @mcp.tool()
35
+ async def get_gene_info(gene_id: str) -> str:
36
+ """
37
+ Get description for a single gene ID.
18
38
 
19
39
  Args:
20
- agent: The pydantic-ai Agent with tools
40
+ gene_id: The gene identifier (UniProt ID, gene symbol, etc.)
21
41
 
22
42
  Returns:
23
- A list of tools in the Anthropic format
43
+ The gene description in a structured format
24
44
  """
25
- anthropic_tools = []
26
- for tool in agent.tools:
27
- anthropic_tool = {
28
- "name": tool.name,
29
- "description": tool.description,
30
- "input_schema": {
31
- "type": "object",
32
- "properties": {},
33
- "required": []
34
- }
35
- }
36
-
37
- for param_name, param in tool.params.items():
38
- if param_name == "ctx":
39
- continue
40
-
41
- param_schema = {"type": "string"}
42
- if param.annotation.__origin__ == list:
43
- param_schema = {
44
- "type": "array",
45
- "items": {"type": "string"}
46
- }
47
-
48
- anthropic_tool["input_schema"]["properties"][param_name] = param_schema
49
- if param.default == param.empty:
50
- anthropic_tool["input_schema"]["required"].append(param_name)
51
-
52
- anthropic_tools.append(anthropic_tool)
53
-
54
- return anthropic_tools
55
-
45
+ return get_gene_description(ctx(), gene_id)
56
46
 
57
- def create_bedrock_compatible_resp(
58
- response_id: str,
59
- model: str,
60
- role: str,
61
- content: List[Dict[str, Any]]
62
- ) -> Dict[str, Any]:
63
- """Create a response compatible with the Bedrock format.
47
+ @mcp.tool()
48
+ async def get_multiple_gene_info(gene_ids: str) -> str:
49
+ """
50
+ Get descriptions for multiple gene IDs provided as a string.
64
51
 
65
52
  Args:
66
- response_id: The response ID
67
- model: The model name
68
- role: The role (usually 'assistant')
69
- content: The content from the Anthropic response
53
+ gene_ids: String containing gene identifiers separated by commas, spaces, or newlines
70
54
 
71
55
  Returns:
72
- A response in the Bedrock format
56
+ The gene descriptions in a structured format
73
57
  """
74
- return {
75
- "id": response_id,
76
- "model": model,
77
- "choices": [
78
- {
79
- "message": {
80
- "role": role,
81
- "content": content
82
- }
83
- }
84
- ]
85
- }
86
-
58
+ return get_genes_from_list(ctx(), gene_ids)
87
59
 
88
- def get_talisman_mcp_tools() -> List[Dict[str, Any]]:
89
- """Get the MCP tools for the Talisman agent.
90
-
91
- Returns:
92
- A list of tools in the MCP format
60
+ @mcp.tool()
61
+ async def analyze_genes(gene_list: str) -> str:
93
62
  """
94
- return tools_to_anthropic_tools(talisman_agent)
95
-
96
-
97
- def get_talisman_mcp_messages(
98
- messages: Optional[List[Dict[str, Any]]] = None,
99
- system: Optional[str] = None,
100
- ) -> List[Dict[str, Any]]:
101
- """Get MCP messages for the Talisman agent.
102
-
103
- Args:
104
- messages: Previous messages
105
- system: System message override
106
-
107
- Returns:
108
- List of MCP messages
109
- """
110
- if messages is None:
111
- messages = []
112
-
113
- if system is None:
114
- system = TALISMAN_SYSTEM_PROMPT
63
+ Analyze a set of genes and generate a biological summary of their properties and relationships.
115
64
 
116
- if not messages or messages[0].get("role") != "system":
117
- messages = [{"role": "system", "content": system}] + messages
118
-
119
- return messages
120
-
121
-
122
- def handle_talisman_mcp_request(
123
- messages: List[Dict[str, Any]],
124
- config: Optional[TalismanConfig] = None,
125
- model: str = "claude-3-5-sonnet-20240620",
126
- max_tokens: int = 4096,
127
- temperature: float = 0.0,
128
- ) -> Dict[str, Any]:
129
- """Handle an MCP request for the Talisman agent.
130
-
131
65
  Args:
132
- messages: The messages from the client
133
- config: The Talisman configuration (optional)
134
- model: The model to use
135
- max_tokens: The maximum number of tokens to generate
136
- temperature: The temperature to use for generation
137
-
66
+ gene_list: String containing gene identifiers separated by commas, spaces, or newlines
67
+
138
68
  Returns:
139
- An MCP response
69
+ A structured biological summary of the gene set with Narrative, Functional Terms Table, and Gene Summary Table
140
70
  """
141
- config = config or get_config()
142
-
143
- api_key = os.environ.get("ANTHROPIC_API_KEY")
144
- if not api_key:
145
- raise ValueError("ANTHROPIC_API_KEY environment variable is required for MCP")
146
-
147
- client = Anthropic(api_key=api_key)
148
-
149
- # Prepare the messages and tools
150
- mcp_messages = get_talisman_mcp_messages(messages)
151
- mcp_tools = get_talisman_mcp_tools()
152
-
153
- # Send the request to Anthropic
154
- response = client.messages.create(
155
- model=model,
156
- messages=mcp_messages,
157
- tools=mcp_tools,
158
- max_tokens=max_tokens,
159
- temperature=temperature,
160
- )
71
+ return analyze_gene_set(ctx(), gene_list)
161
72
 
162
- # Return the response in a format compatible with the MCP protocol
163
- return create_bedrock_compatible_resp(
164
- response_id=response.id,
165
- model=model,
166
- role="assistant",
167
- content=response.content,
168
- )
73
+ if __name__ == "__main__":
74
+ # Initialize and run the server
75
+ mcp.run(transport='stdio')
@@ -50,6 +50,7 @@ ubergraph_agent = Agent(
50
50
  "openai:gpt-4o",
51
51
  deps_type=Dependencies,
52
52
  result_type=str,
53
+ defer_model_check=True,
53
54
  )
54
55
 
55
56
  # Register tools
@@ -4,9 +4,9 @@ Tools for interacting with the UberGraph SPARQL endpoint.
4
4
  import asyncio
5
5
  from typing import Any, Dict, List, Optional
6
6
 
7
+ import requests
7
8
  from pydantic import BaseModel
8
9
  from pydantic_ai import RunContext, ModelRetry
9
- from SPARQLWrapper import JSON, SPARQLWrapper
10
10
 
11
11
  from .ubergraph_config import Dependencies, get_config
12
12
 
@@ -88,13 +88,23 @@ async def query_ubergraph(ctx: RunContext[Dependencies], query: str) -> QueryRes
88
88
  print("##")
89
89
 
90
90
  try:
91
- # Create SPARQL wrapper
92
- sw = SPARQLWrapper(endpoint)
93
- sw.setQuery(prefixed_query)
94
- sw.setReturnFormat(JSON)
91
+ # Define a function to execute in a thread pool
92
+ def run_query():
93
+ response = requests.post(
94
+ endpoint,
95
+ data={
96
+ 'query': prefixed_query,
97
+ },
98
+ headers={
99
+ 'Accept': 'application/sparql-results+json',
100
+ 'Content-Type': 'application/x-www-form-urlencoded'
101
+ }
102
+ )
103
+ response.raise_for_status() # Raise an exception for HTTP errors
104
+ return response.json()
95
105
 
96
106
  # Execute the query in a thread pool
97
- ret = await asyncio.to_thread(sw.queryAndConvert)
107
+ ret = await asyncio.to_thread(run_query)
98
108
 
99
109
  # Process the results
100
110
  results = simplify_results(ret, prefixes, limit=config.max_results)
@@ -105,6 +115,8 @@ async def query_ubergraph(ctx: RunContext[Dependencies], query: str) -> QueryRes
105
115
  raise ModelRetry(f"No results found for SPARQL query. Try refining your query.")
106
116
 
107
117
  return QueryResults(results=results)
118
+ except requests.RequestException as e:
119
+ raise ModelRetry(f"Error connecting to SPARQL endpoint: {str(e)}")
108
120
  except Exception as e:
109
121
  if "ModelRetry" in str(type(e)):
110
122
  raise e
@@ -1,37 +0,0 @@
1
- """
2
- UniProt agent package for interacting with the UniProt database.
3
- """
4
-
5
- from .uniprot_agent import uniprot_agent, UNIPROT_SYSTEM_PROMPT
6
- from .uniprot_config import UniprotConfig, get_config
7
- from .uniprot_gradio import chat
8
- from .uniprot_mcp import (
9
- get_uniprot_mcp_tools,
10
- get_uniprot_mcp_messages,
11
- handle_uniprot_mcp_request,
12
- )
13
- from .uniprot_tools import lookup_uniprot_entry, search, uniprot_mapping, normalize_uniprot_id
14
-
15
- __all__ = [
16
- # Agent
17
- "uniprot_agent",
18
- "UNIPROT_SYSTEM_PROMPT",
19
-
20
- # Config
21
- "UniprotConfig",
22
- "get_config",
23
-
24
- # Tools
25
- "lookup_uniprot_entry",
26
- "search",
27
- "uniprot_mapping",
28
- "normalize_uniprot_id",
29
-
30
- # Gradio
31
- "chat",
32
-
33
- # MCP
34
- "get_uniprot_mcp_tools",
35
- "get_uniprot_mcp_messages",
36
- "handle_uniprot_mcp_request",
37
- ]
@@ -43,9 +43,11 @@ async def search_web(query: str) -> str:
43
43
  return web_search(query)
44
44
 
45
45
 
46
- async def perplexity_query(query: str, model_name: str = "sonar") -> ResultWithCitations:
46
+ async def perplexity_query(query: str, model_name: str = "sonar-pro") -> ResultWithCitations:
47
47
  """
48
48
  Query the Perplexity API and return structured results with citations.
49
+
50
+ The Perplexity API performs a web search and returns a structured response with citations.
49
51
 
50
52
  Args:
51
53
  query: The query to send to Perplexity
@@ -58,14 +60,25 @@ async def perplexity_query(query: str, model_name: str = "sonar") -> ResultWithC
58
60
  ValueError: If the Perplexity API key is not set
59
61
  RuntimeError: If the response parsing fails
60
62
  """
63
+ # TODO: consider using perplexity API directly, gives control over search domains, e.g. https://docs.perplexity.ai/guides/search-domain-filters
61
64
  perplexity_api_key = os.environ.get("PERPLEXITY_API_KEY")
62
65
  if not perplexity_api_key:
63
66
  raise ValueError("PERPLEXITY_API_KEY environment variable is not set")
64
67
 
68
+ # Use specific implementation instead of OpenAIModel directly
69
+ # since OpenAIModel doesn't accept base_url and api_key params directly
70
+ from pydantic_ai.models.openai import Provider
71
+ from pydantic_ai.providers.openai import OpenAIProvider
72
+
73
+
74
+ provider = OpenAIProvider(
75
+ api_key=perplexity_api_key,
76
+ base_url='https://api.perplexity.ai'
77
+ )
78
+
65
79
  sonar_model = OpenAIModel(
66
80
  model_name=model_name,
67
- base_url='https://api.perplexity.ai',
68
- api_key=perplexity_api_key,
81
+ provider=provider,
69
82
  )
70
83
 
71
84
  agent = Agent(sonar_model,
aurelian/cli.py CHANGED
@@ -4,6 +4,7 @@ import logging
4
4
  import os
5
5
  from typing import Any, Awaitable, Callable, Optional, List
6
6
 
7
+ from aurelian.utils.async_utils import run_sync
7
8
  import click
8
9
  from pydantic_ai.models.openai import OpenAIModel
9
10
  from pydantic_ai.providers.openai import OpenAIProvider
@@ -550,6 +551,14 @@ def websearch(term):
550
551
  txt = web_search(term)
551
552
  print(txt)
552
553
 
554
+ @main.command()
555
+ @click.argument("term")
556
+ def perplexity(term):
557
+ """Search the web for a query term, with citations."""
558
+ from aurelian.agents.web.web_tools import perplexity_query
559
+ result = run_sync(perplexity_query(term))
560
+ import yaml
561
+ print(yaml.dump(result.model_dump(), indent=2))
553
562
 
554
563
  @main.command()
555
564
  @click.argument("url")
@@ -0,0 +1,9 @@
1
+ # Use TypedDict for metadata
2
+ from typing_extensions import TypedDict
3
+
4
+
5
+ MetadataDict = TypedDict("Metadata", {"difficulty": str, "type": str})
6
+
7
+
8
+ def metadata(difficulty: str, type: str) -> MetadataDict:
9
+ return {"difficulty": difficulty, "type": type}
@@ -0,0 +1,30 @@
1
+ from pydantic_evals.evaluators import Evaluator, EvaluatorContext
2
+
3
+
4
+ class SubstringEvaluator(Evaluator[str, str]):
5
+ """
6
+ Custom evaluator for GO-CAM agent responses.
7
+
8
+ This evaluator checks if the expected substring is present in the agent's response.
9
+ If no expected output is specified, it assumes the test passes (for cases where we
10
+ only want to verify the agent doesn't error out).
11
+ """
12
+
13
+ def evaluate(self, ctx: EvaluatorContext[str, str]) -> float:
14
+ """
15
+ Evaluate GO-CAM agent response by checking for expected substring.
16
+
17
+ Args:
18
+ ctx: The evaluator context containing input, output, and expected output
19
+
20
+ Returns:
21
+ Score between 0.0 and 1.0 (1.0 = pass, 0.0 = fail)
22
+ """
23
+ # If no expected output is specified, return 1.0 (success)
24
+ if ctx.expected_output is None:
25
+ return 1.0
26
+
27
+ # Check if expected string is in output
28
+ if ctx.expected_output.lower() in ctx.output.lower():
29
+ return 1.0
30
+ return 0.0
@@ -1,11 +1,14 @@
1
1
  import asyncio
2
- from typing import Callable
2
+ from typing import Callable, Coroutine
3
3
 
4
4
 
5
- def run_sync(f: Callable):
5
+ def run_sync(f: Callable | Coroutine):
6
6
  loop = asyncio.new_event_loop()
7
7
  asyncio.set_event_loop(loop)
8
- result = f()
8
+ if isinstance(f, Coroutine):
9
+ result = f
10
+ else:
11
+ result = f()
9
12
 
10
13
  # Ensure it's a coroutine before running it
11
14
  if asyncio.iscoroutine(result):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: aurelian
3
- Version: 0.3.4
3
+ Version: 0.4.2
4
4
  Summary: aurelian
5
5
  License: MIT
6
6
  Author: Author 1
@@ -17,6 +17,7 @@ Provides-Extra: gocam
17
17
  Provides-Extra: gradio
18
18
  Provides-Extra: linkml
19
19
  Provides-Extra: pdfminer
20
+ Provides-Extra: pypaperbot
20
21
  Provides-Extra: rdkit
21
22
  Requires-Dist: bioservices (>=1.12.0) ; extra == "bioservices"
22
23
  Requires-Dist: bs4 (>=0.0.2)
@@ -30,13 +31,14 @@ Requires-Dist: linkml ; extra == "linkml"
30
31
  Requires-Dist: linkml-store[llm,mongodb] (>=0.2.4)
31
32
  Requires-Dist: logfire (>=3.5.3)
32
33
  Requires-Dist: markdownify (>=0.14.1)
33
- Requires-Dist: markitdown (>=0.0.1a4)
34
+ Requires-Dist: markitdown (>=0.1.1)
34
35
  Requires-Dist: mcp[cli] (>=1.3.0,<2.0.0)
35
36
  Requires-Dist: oaklib (>=0.6.19)
37
+ Requires-Dist: onnxruntime (<=1.19.0)
36
38
  Requires-Dist: paper-qa (>=5.20.0,<6.0.0)
37
39
  Requires-Dist: pdfminer-six ; extra == "pdfminer"
38
- Requires-Dist: pydantic-ai (>=0.0.29)
39
- Requires-Dist: pypaperbot (>=1.4.1)
40
+ Requires-Dist: pydantic-ai (>=0.2.0)
41
+ Requires-Dist: pypaperbot (>=1.4.1) ; extra == "pypaperbot"
40
42
  Requires-Dist: pytest-asyncio (>=0.25.3,<0.26.0)
41
43
  Requires-Dist: rdkit ; extra == "rdkit" or extra == "chem"
42
44
  Requires-Dist: tabulate (>=0.9.0)
@@ -8,14 +8,14 @@ aurelian/agents/amigo/amigo_gradio.py,sha256=UYJW2ZdDQJz77wZNetxejWEI5tz39lVRWXZ
8
8
  aurelian/agents/amigo/amigo_mcp.py,sha256=byLMDguj_osVV5Q4m1Fp_I1megZm28TzV3YVoi5qa1Q,3831
9
9
  aurelian/agents/amigo/amigo_tools.py,sha256=upTjjw4rKCFe3qX-633-9mlQZmXGcNsU8IV7Zd9XJvE,5561
10
10
  aurelian/agents/biblio/__init__.py,sha256=xBuwjRYjyWRbABMaa7NaMwJUmSDj0AATQ_55Oy_FitA,814
11
- aurelian/agents/biblio/biblio_agent.py,sha256=LmBFJhF_t10WYM7j0WrX-8eiKwR8YiBY-mgbm3_l4lw,3698
11
+ aurelian/agents/biblio/biblio_agent.py,sha256=7icG6TzCr1vNgkMHju662IceRQOsEt5XLkipnybxHlw,3726
12
12
  aurelian/agents/biblio/biblio_config.py,sha256=K2crtuWIsvzLaoD0bINrx7_VPucp4Qwbfwj8DEn_09E,1254
13
13
  aurelian/agents/biblio/biblio_gradio.py,sha256=4YTqYn4Jw0MX29udZ4iCJP-YXKl9yQdPAwouPRr_B1I,1911
14
14
  aurelian/agents/biblio/biblio_mcp.py,sha256=zZpRHTc7tVAcBL190sDSPcmvous7vjYx0S0OD8-q4IE,3156
15
15
  aurelian/agents/biblio/biblio_tools.py,sha256=tTihpzOTjLBwvMm6QNAHsUb9yWdT4DziOt7t3XWe0_o,4936
16
16
  aurelian/agents/biblio_agent.py,sha256=0Uvh6N6AQdva-4NgjOlFHXQFPuEwLyAqUVGtRkokn-U,1241
17
17
  aurelian/agents/checklist/__init__.py,sha256=ZN70snI4C871K-76oRCMU3XZPYl_4lKH4VzPUx9tvCg,1034
18
- aurelian/agents/checklist/checklist_agent.py,sha256=J8IsDzYMc-Ejr3HSP6HCKTbmQYjdymCnUE6gOw3Sfe8,2760
18
+ aurelian/agents/checklist/checklist_agent.py,sha256=G7NpLDSqKvqz3mti1t8SAceFnXHko0knjotqx1YpMQY,2788
19
19
  aurelian/agents/checklist/checklist_config.py,sha256=8V_fwWj3dPEyJmcle0nscfvcxdUFiAGsE1T17GnFNIk,828
20
20
  aurelian/agents/checklist/checklist_gradio.py,sha256=UOwL7BCjyRsnldP-3RVhzxQsRGLC5QztY8iuAxqjIsY,1981
21
21
  aurelian/agents/checklist/checklist_mcp.py,sha256=cQo_VmP_U-A0cQEHBMrgt5gYIr3nkVFTLv-8ucS0D20,2238
@@ -24,22 +24,22 @@ aurelian/agents/checklist/content/checklists.yaml,sha256=QVPp65lnPfRJvHxXgFEFu_W
24
24
  aurelian/agents/checklist/content/streams.csv,sha256=VjqssvA05-tdJC5Egr-ZR6RZVTSfHvucZRQFEOlqGm4,50132
25
25
  aurelian/agents/checklist_agent.py,sha256=2K1l2ctb8oIWGOqMuWBfuM0WEZ0pa2BiQUefXWAvnJI,1187
26
26
  aurelian/agents/chemistry/__init__.py,sha256=_a0iQB50o5cF-t-SI5EkaP8oCeDWc2QKvJ0m628Typ8,68
27
- aurelian/agents/chemistry/chemistry_agent.py,sha256=L_m-oLaAZsLh4rWS68Vp4HONLLFRsHwjEHBqK05dQfM,1565
27
+ aurelian/agents/chemistry/chemistry_agent.py,sha256=ah8ba8-WLyi-5DIjmRfRURbmienbwyx_h1TXkR16o98,1594
28
28
  aurelian/agents/chemistry/chemistry_config.py,sha256=r348qJwBpvp6Q8MbnA3OOOSBjhFj-J_5J68OpKgTijE,1900
29
29
  aurelian/agents/chemistry/chemistry_evals.py,sha256=s_elRDsjle8fNrkL4c4Ud2NrFnoCM3goJkcwORhi-4Y,2611
30
30
  aurelian/agents/chemistry/chemistry_gradio.py,sha256=2tF6HhRhbJK_3zQfydBn0kwFAJiQQcHzeva8tax4DEM,1545
31
31
  aurelian/agents/chemistry/chemistry_mcp.py,sha256=ZS8lXMjCwj60RCv4t6BFxqU0uiiGxLFhWoG9vNb_Ld0,2892
32
32
  aurelian/agents/chemistry/chemistry_tools.py,sha256=sJ0FWMqwvf1cOd1XEmdOkViYY7FhWUZ_z0zMD8EyQ30,3387
33
33
  aurelian/agents/chemistry/image_agent.py,sha256=Taty5MYbhg7XPzpGgfMeu7Ll6D5f_grClGPF9M3boTE,562
34
- aurelian/agents/d4d/__init__.py,sha256=cWKTT72IZ1MDQbIjnJfIpufLGooPGfH3VdWmRABleJg,613
35
- aurelian/agents/d4d/d4d_agent.py,sha256=fMdNhOEdz5_cNAYRSvpVjOTMQMObBmLUO6HCtOav6MY,2115
34
+ aurelian/agents/d4d/__init__.py,sha256=h7jmgzmu_zEU-5HpejrDs0Wsigq4kpvdNLC3s-MHXuI,597
35
+ aurelian/agents/d4d/d4d_agent.py,sha256=tmWb3qnHQcS1o5GMyyePN-UaC7231KOGIPUDEK1-Tg0,2119
36
36
  aurelian/agents/d4d/d4d_config.py,sha256=vQz1ym2NDim2cQV4gFMXTDcAEeg5RAVBkWvVIdo7CNo,1471
37
- aurelian/agents/d4d/d4d_gradio.py,sha256=Xpq0ObbkYgmOa74iBJCDTM9QsdQtTZL4g3nwE-DjUAs,1860
37
+ aurelian/agents/d4d/d4d_gradio.py,sha256=gJXImWqQv9PAPKVlexhdvXqTcDpQWbEi1xLWVGIly9Q,1844
38
38
  aurelian/agents/d4d/d4d_mcp.py,sha256=QjRqFd4miAbfFwzos5idHA-wfdN5-djpD2Ot0xogb58,1810
39
39
  aurelian/agents/d4d/d4d_tools.py,sha256=ymyWSOOYF6vgv06mpU_GQH7gecIUYluqvT3eXgEhfVA,4803
40
40
  aurelian/agents/d4d_agent.py,sha256=hDS5RVisPcKzDX202vYzz54kyGZ1_L8VfBCDfXPlpPk,1896
41
41
  aurelian/agents/diagnosis/__init__.py,sha256=HhW4NEjr8Zo6Lqxiq0AW3pzGZu1N8xEkdAd0EG_7fak,668
42
- aurelian/agents/diagnosis/diagnosis_agent.py,sha256=ID8EkZ8C-YMo3g5TY12ZZ_fBXWyRbp0_klBqd8HSous,2341
42
+ aurelian/agents/diagnosis/diagnosis_agent.py,sha256=-nJ7gwZZ6N6I-A6y9SVxrqKV98b-DgrkAE82jpiZ20s,2369
43
43
  aurelian/agents/diagnosis/diagnosis_config.py,sha256=TCoJ9tPmXS0gvXgmziSqAMHKXdl48Mg5AFejS_0Wvxo,1565
44
44
  aurelian/agents/diagnosis/diagnosis_evals.py,sha256=FL42urNIAsWo9iMRmpynlrvMYLnazsC9tMPdPm86JG8,2582
45
45
  aurelian/agents/diagnosis/diagnosis_gradio.py,sha256=We_ZxhxmlvcxcvVmf2NuflmeHVIYmDJ_LvrO4hL1Y9U,1754
@@ -78,7 +78,7 @@ aurelian/agents/goann/goann_evals.py,sha256=foDikX0KBYcfBamf0G5UWcJstADbNrRB7q_T
78
78
  aurelian/agents/goann/goann_gradio.py,sha256=s_mx4Qh2_5SgXdR3NuY_Jr1h38vTjz__-Tv0yk8QLU0,2025
79
79
  aurelian/agents/goann/goann_mcp.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  aurelian/agents/goann/goann_tools.py,sha256=m5nM41nbH45IZ8-BXCaWOX970j0spYwjQJhFs23EvAs,2059
81
- aurelian/agents/gocam/__init__.py,sha256=0jLnmPKRPv414TUmhOQyDU1WGopelFpIgvMslOM4fEA,883
81
+ aurelian/agents/gocam/__init__.py,sha256=CuXryR9hlrCSdlDSctqKsorHO7jbrI2eGBwcoBDYEJY,1196
82
82
  aurelian/agents/gocam/documents/DNA-binding transcription factor activity annotation guidelines.docx,sha256=aohQYDq-iI6dj4AWpWZO-6dG91i_UhJ9Cvre40hsO5I,946469
83
83
  aurelian/agents/gocam/documents/DNA-binding transcription factor activity annotation guidelines.pdf,sha256=ffnp3EwWD-guJtv69IEo2y-Sw-mQn-ZiXPK-V2CvWC8,602114
84
84
  aurelian/agents/gocam/documents/DNA-binding_transcription_factor_activity_annotation_guidelines.md,sha256=m2C4wIk0snHbG5BEH2ys_u1bisdK6D-2l5rxbWYiDww,5604
@@ -136,10 +136,10 @@ aurelian/agents/gocam/documents/md/Transcription_coregulator_activity.md,sha256=
136
136
  aurelian/agents/gocam/documents/md/Transporter_activity_annotation_annotation_guidelines.md,sha256=7wrC8TryecwxXdXN6_XpUP7dHoUZ2-vzCHhLitCm42A,1688
137
137
  aurelian/agents/gocam/documents/md/WIP_-_Regulation_and_Regulatory_Processes_in_GO-CAM.md,sha256=Ug84Aa640VBwpMom5blksjweKjCutHKUYqBBzwzgG-I,2653
138
138
  aurelian/agents/gocam/documents/pandoc_md/Signaling_receptor_activity_annotation_guidelines.md,sha256=TGw39vKs5XE0jF3s0A6XzP4_ovKS3nohqlrGlK7kVFo,11990
139
- aurelian/agents/gocam/gocam_agent.py,sha256=G5XGiNaVgJjDjv0VLn875Ts5cfNDDq7nLwSahJNtFgw,9413
139
+ aurelian/agents/gocam/gocam_agent.py,sha256=5em_lS64D2eG_srlGU4B_76FTx3NABPAgmTrYcPr1a0,9497
140
140
  aurelian/agents/gocam/gocam_config.py,sha256=MU7jRhrkB05kRT-ruPDoPpHMPFCn2y2Od6B13XIj6R0,2492
141
141
  aurelian/agents/gocam/gocam_curator_agent.py,sha256=4OK3PoNCNA3pVLV6yq7Rm0ZN7YQ5todAvjJvYzAPPrY,1452
142
- aurelian/agents/gocam/gocam_evals.py,sha256=ZrzLQaLXkRaqZ3RJrkhYVxu8PWXWKAXzOCmnOp8u34M,2041
142
+ aurelian/agents/gocam/gocam_evals.py,sha256=x9K04niguY2BVtPA99ifj3gb7dIlu5Xt_YEpqpPcky4,1934
143
143
  aurelian/agents/gocam/gocam_gradio.py,sha256=Ah1VnlGSYVzLPQel5SbZ-RNsI_QRg0PJBt6VGGIOOfo,3098
144
144
  aurelian/agents/gocam/gocam_mcp.py,sha256=S-KT5GuQKtzvq33Qemm1Wwg3jhl64GnGbic_tA4-XoQ,5915
145
145
  aurelian/agents/gocam/gocam_tools.py,sha256=tmhXLIYHDbXiteChzV6n-RzRhMiX2GSR9D2b47MmyxI,9671
@@ -148,32 +148,32 @@ aurelian/agents/linkml/linkml_agent.py,sha256=JhYfg-xMGhlj2VqaqeqTZEOhTcBkGzTj5a
148
148
  aurelian/agents/linkml/linkml_config.py,sha256=VIPPX7H5eGbw7Rx-YyDorOYVHZz1TQxqFtFKwFtmFwg,1450
149
149
  aurelian/agents/linkml/linkml_evals.py,sha256=odQ6unXhobBT6krqYVtdx1Jl91xh4m6avBk7-BlnHvc,2124
150
150
  aurelian/agents/linkml/linkml_gradio.py,sha256=XaaBQEZTJdW2HdENbs2LjlHjcfjAr2-setFePJKp6bg,1303
151
- aurelian/agents/linkml/linkml_mcp.py,sha256=rR31BiIId0rcq39Zpz4uuzyHzZhjHp1uslHezqw1CDw,4775
151
+ aurelian/agents/linkml/linkml_mcp.py,sha256=8CttCtfiFrRU4FX4-JjXvDBnpMYnz3oOVvVuP2OlMjE,4711
152
152
  aurelian/agents/linkml/linkml_tools.py,sha256=-y53s1MIJdLsqJstZF-8t5ocigHOLtXTDxmRIhY7uyc,3684
153
153
  aurelian/agents/literature/__init__.py,sha256=8EY_j4JWf5Mbowv6mzUE6TLpkhwrbNZSKT-NEH65KpU,101
154
- aurelian/agents/literature/literature_agent.py,sha256=jmTNwBkEp-7mG53AvXNGIudigg0ys6iiPtTzMSS9l3U,1708
154
+ aurelian/agents/literature/literature_agent.py,sha256=LB9RYOK4bzaQUfs8D6rmLQ-1NCwNAPSFsfu_hCY4f00,2275
155
155
  aurelian/agents/literature/literature_config.py,sha256=uDyhonTSdMP5L1dXgIGhgwlaHeyRPxjpVQkmt6kx7cE,947
156
156
  aurelian/agents/literature/literature_gradio.py,sha256=5GAef4fB8GgfOokwpL016MIpyIZ20gfb5snZJWGF-k8,1646
157
157
  aurelian/agents/literature/literature_mcp.py,sha256=fVBW7Vg8pW2vRq8RPio6Ltk_xe4KJCs_UCQzlsLDrJo,3925
158
158
  aurelian/agents/literature/literature_tools.py,sha256=vZMTV-V3xpo4SvkEPnuJAsbv6gGCwQGbcvLW6ec6jX8,5849
159
- aurelian/agents/monarch/__init__.py,sha256=8klP_zmBDbJoj7vUZTH_8WeGy-BC2fr1_SZ94AgfcVQ,563
160
- aurelian/agents/monarch/monarch_agent.py,sha256=7Oyo4HCSJu6p9-GVQUCOJKnSt-Qnb98F9x1bp42mRlI,1798
159
+ aurelian/agents/monarch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
+ aurelian/agents/monarch/monarch_agent.py,sha256=nve0m3BDj9_QwbUBy4Ht5ltVXElo1H_Hh3lPgc43rE4,1826
161
161
  aurelian/agents/monarch/monarch_config.py,sha256=3g5OXmMnuH0by1IZY9YLn4WPR6hr4XKCreq1SBGMzXo,1390
162
162
  aurelian/agents/monarch/monarch_gradio.py,sha256=GG5m4m8x4crFwP2a5z8s97nylG6gwuRXHa7RO82PPvY,1528
163
163
  aurelian/agents/monarch/monarch_mcp.py,sha256=U-K0XlpRIMPlAm5dKQkqemepz-DemCmFLMJWLASV0AI,1839
164
- aurelian/agents/monarch/monarch_tools.py,sha256=icghELlr5qvcjhpb5sK7iN6lWAIeH26Zyj2_jMLRSY8,3602
164
+ aurelian/agents/monarch/monarch_tools.py,sha256=z6ohe4wzO8vBVSV_23FSPwLzFNhFrk6Hkdy7FCOmhos,3554
165
165
  aurelian/agents/oak/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
166
  aurelian/agents/oak/oak_config.py,sha256=Gc9_edlkZKF-8377xwx2QiIxVHGiHA2xWPgYVyG-tvE,675
167
167
  aurelian/agents/oak/oak_gradio.py,sha256=-y99MoEORea2sLIvcvEEbeKDojxm0I7bXzzZkoSHu_s,1669
168
168
  aurelian/agents/ontology_mapper/__init__.py,sha256=5SCUej1UyBJSuSwZrNHHO8rrTPElup_ufOClKom6_v8,646
169
- aurelian/agents/ontology_mapper/ontology_mapper_agent.py,sha256=fPIaEbLERvbO0Tj2Y8MhlFscSkI8IM_rXBWnWzw6ZaA,2768
169
+ aurelian/agents/ontology_mapper/ontology_mapper_agent.py,sha256=sE22zXyAru9dc1nlZB-0uAWWmd2RsoUndqoiwvrL_yk,2796
170
170
  aurelian/agents/ontology_mapper/ontology_mapper_config.py,sha256=iqJzuZ6M7BSs0qGgeah5u7THOusZ3VjvH8lJ6IiYgSE,1639
171
171
  aurelian/agents/ontology_mapper/ontology_mapper_evals.py,sha256=6kympT8LV570rRozgeBIyEdZ3dDfRGH2o3x4x2F__9Q,3591
172
172
  aurelian/agents/ontology_mapper/ontology_mapper_gradio.py,sha256=nzkwPvK3k6Sze8oNS2R8z4k2XeXj4LU2wjV4G_Jn-Ec,1819
173
173
  aurelian/agents/ontology_mapper/ontology_mapper_mcp.py,sha256=YnXCKU2Yzy_RPqEba8hJPWwtb1H07Wo-zlZY-nnKurw,2208
174
174
  aurelian/agents/ontology_mapper/ontology_mapper_tools.py,sha256=S0azD3wR0pTh-9ipjVBUiNRkgsDEb30n1KMZD0qWvyw,4272
175
175
  aurelian/agents/paperqa/__init__.py,sha256=Dfff3fyx9PeoeqA4DcvyE_loW-UXegYM281alttwLvI,590
176
- aurelian/agents/paperqa/paperqa_agent.py,sha256=LimGkiN89gK-kD-AdrBXqIHw9FdC2JkBZTDZAuP1YX4,2615
176
+ aurelian/agents/paperqa/paperqa_agent.py,sha256=FAPgHVeW63jT07trjV2HzNqq7OivRDlhp2Kn50Kb5Gs,2643
177
177
  aurelian/agents/paperqa/paperqa_cli.py,sha256=A0cwGUUTVcFVO1e_PsXusvBae9N5ElyeCtsZuQh-eGo,10357
178
178
  aurelian/agents/paperqa/paperqa_config.py,sha256=CUj3BARcII8AippAYJXAq9MsqrQlkRm36ucHyuCGnII,4554
179
179
  aurelian/agents/paperqa/paperqa_gradio.py,sha256=Thz82905TBeUQSiKcT40ZFs9MOqlN3YzYrJ5LNZPjHs,2844
@@ -187,7 +187,7 @@ aurelian/agents/phenopackets/phenopackets_gradio.py,sha256=KJdu5ZIgyYhAvpQLQ012J
187
187
  aurelian/agents/phenopackets/phenopackets_mcp.py,sha256=PzhqNW6RC9E5jRG9xBzMGVP3u-tQmTt6Idq_zDAeEsE,4677
188
188
  aurelian/agents/phenopackets/phenopackets_tools.py,sha256=3U8mjA_mi3K6Sb5VOSfT3Z-ytTx2cuz8zFLnFxxp-U8,4052
189
189
  aurelian/agents/rag/__init__.py,sha256=eqnU5tVCH52qW5KKSAgUzhh7WDYl-HZb84j-V5fs48g,749
190
- aurelian/agents/rag/rag_agent.py,sha256=xt1w1FYJdCceXXRHH16DEiuWXrV7v6mf6emyUjL0R4M,2526
190
+ aurelian/agents/rag/rag_agent.py,sha256=vkOsAwDWyt-uexqdUuHQ1QehLiYjk8P8E83QK61f9-0,2554
191
191
  aurelian/agents/rag/rag_config.py,sha256=M5q56xOp7ZfK21mi0gOCJP8dXiWjPvbTHmv-36YyVq8,2692
192
192
  aurelian/agents/rag/rag_gradio.py,sha256=Vl9GicDP0xlL7126RUHx9f0loQGa_JnFwN0QtOT_58w,1844
193
193
  aurelian/agents/rag/rag_mcp.py,sha256=-o0c868DZdqfB38QOHFDqGHrwyWqI7vAK6aNAtDP3XA,2543
@@ -208,15 +208,15 @@ aurelian/agents/talisman/run_talisman.py,sha256=K_GX9eqA2wrhXIDjtTfpCh7UHRObniSY
208
208
  aurelian/agents/talisman/talisman_agent.py,sha256=KBvCCkzl-j_PObfMBrsyXg3kvCDmCpi2DAOnuaURdMI,6641
209
209
  aurelian/agents/talisman/talisman_config.py,sha256=bYjgMecVrKXwwZwv7n7Leseks6DFEfqVEZF9MqgoShQ,2301
210
210
  aurelian/agents/talisman/talisman_gradio.py,sha256=ogpFwnxVngvu5UmQ1GKz2JdbpCWlIK7duQDLJGisWs8,1617
211
- aurelian/agents/talisman/talisman_mcp.py,sha256=dOLpklOqDRmsvm4ZFGZwKrcrrsx_FcahxcIOUnvJYm8,4612
211
+ aurelian/agents/talisman/talisman_mcp.py,sha256=yQbLR6ITvl3qsV-p4nnqEDYW_R5qRyQNl56CkEWiY8k,2189
212
212
  aurelian/agents/talisman/talisman_tools.py,sha256=ZzvpFxZBXpeZrIFV9aqtwVqa6O3z_5WvUReWOHh-aS4,42256
213
213
  aurelian/agents/ubergraph/__init__.py,sha256=Nl81e1H7XKBSQ2nIHoY0UCHgcOW5N-PJ1AugKh_YGOs,767
214
- aurelian/agents/ubergraph/ubergraph_agent.py,sha256=UUu-PQz9MPFZZIuRw0KPSokTaFh_cMVNjRVj3BsG1ek,3038
214
+ aurelian/agents/ubergraph/ubergraph_agent.py,sha256=dW1IG35w7OgNgC5SDgNFB6K2RJCsRrfnTRd2nqrU9Tg,3066
215
215
  aurelian/agents/ubergraph/ubergraph_config.py,sha256=Fi2hFVu92v55IinNYFlLjdvt9THXtRFPkSEcXtTrC10,2774
216
216
  aurelian/agents/ubergraph/ubergraph_gradio.py,sha256=Gig_3AK0B4AkfvjlNklHkr87z2vcphll2I9DLgfdmdU,1372
217
217
  aurelian/agents/ubergraph/ubergraph_mcp.py,sha256=p_YbEkSF4yN0T5OJ8FKIkuOtutOYvFL3TJDtJydSnws,2475
218
- aurelian/agents/ubergraph/ubergraph_tools.py,sha256=9LLlOWXWu8crXCADpvzEJ0gQVNi9fuFYx8SkrDS175s,3428
219
- aurelian/agents/uniprot/__init__.py,sha256=Vj6vhxd8FtoLSKtT3u9yHiCrx__PA3iSDlZ3CoyJ6qE,821
218
+ aurelian/agents/ubergraph/ubergraph_tools.py,sha256=OtyqOyRviuBInCuMwK5dn1jaFJRJIZq6QFImqK3uFWk,3909
219
+ aurelian/agents/uniprot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
220
220
  aurelian/agents/uniprot/uniprot_agent.py,sha256=KMTRKGVpRpSchz7YEShh9ZSSGHzmeaGEUaNFKJPDWSI,1648
221
221
  aurelian/agents/uniprot/uniprot_config.py,sha256=YhL265Z0GnTeXINHawe5iMcpR2ETLmdY3XhNXcYIc8w,1404
222
222
  aurelian/agents/uniprot/uniprot_evals.py,sha256=aZAZAOYFfvywqWuWV1-6p3PpXCxEl_ZkHppl88z5GUw,3178
@@ -227,11 +227,13 @@ aurelian/agents/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
227
227
  aurelian/agents/web/web_config.py,sha256=uk-etu-DzYgeuS2zBs0SVfX_BvZ6QGs0X5PFsf1NR-Q,675
228
228
  aurelian/agents/web/web_gradio.py,sha256=T7qzuRuBaWCYckWjpLu3L0LzHPLEKkxUYp2rj-Og_ms,1334
229
229
  aurelian/agents/web/web_mcp.py,sha256=3mrUlxBqeMSOmtpnD2wWedsOiRJbtveEnbyJqQdfEXQ,1163
230
- aurelian/agents/web/web_tools.py,sha256=BfJJWlHz7tKh9VDjymIwzziahFKrqr2ZUO0QH3IcL6U,4070
230
+ aurelian/agents/web/web_tools.py,sha256=oSS8MFxFqtcPfdEhmEuuiRKW8_NTg3ktLxahlF8h0Ec,4645
231
231
  aurelian/chat.py,sha256=hg9eGKiz_NAjwG5jNGwNqoFrhhx029XX3dWdMRrk-EU,563
232
- aurelian/cli.py,sha256=nRCLPZb__FpMsHqNnDeoYCc0KspESumIKQlrDe97594,34510
232
+ aurelian/cli.py,sha256=-6r3w8H43fhoHrkzn3GQmpQ37McsFHjWP5wZIrnk0gQ,34856
233
233
  aurelian/dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
234
234
  aurelian/dependencies/workdir.py,sha256=G_eGlxKpHRjO3EL2hHN8lvtticgSZvJe300KkJP4vZQ,2228
235
+ aurelian/evaluators/model.py,sha256=USfoHcYTMTlPJaM9-BPksb3asBoDd7amqSnHIbg9YYs,253
236
+ aurelian/evaluators/substring_evaluator.py,sha256=cx1fF3f5FulEeD9iTkgtwo-zByt5qgdmk1XKWJ1_eqQ,1039
235
237
  aurelian/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
236
238
  aurelian/mcp/amigo_mcp_test.py,sha256=TtlYU-5AKcXf2XubFUNpZE2RxFHYi_cVbtte6KJQnzE,2902
237
239
  aurelian/mcp/config_generator.py,sha256=QIaLqURiuOPgGfOImItf89d4ZltYonpybzAcO2vjA2Y,4350
@@ -246,7 +248,7 @@ aurelian/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
246
248
  aurelian/tools/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
247
249
  aurelian/tools/web/url_download.py,sha256=Tpg41yx4Sd3dToV-kGBZggwYUq3hmeLwJttSQrnqz4M,1435
248
250
  aurelian/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
249
- aurelian/utils/async_utils.py,sha256=nkuyNwGmykEfesZ0MUPRdnrSgxb66RD6-tEKVQPwzTo,328
251
+ aurelian/utils/async_utils.py,sha256=mqjYPr8RlXlIXKYRgQ95ZcGTbdIeOw4PHvr37Clopd0,417
250
252
  aurelian/utils/data_utils.py,sha256=LFuSKWtApLJxFGuHLG4-Zhw42cbaQK0juCEXD44b3S4,1047
251
253
  aurelian/utils/documentation_manager.py,sha256=uvAnI_N1V1ITQX53ytOSgvDLbV0IIsSkxpKDg0y3E4g,1767
252
254
  aurelian/utils/doi_fetcher.py,sha256=BNIsYaS9cb2uOSY0jxdjnZAFI2VSk2odzP4ppz3ToHg,8553
@@ -257,8 +259,8 @@ aurelian/utils/pubmed_utils.py,sha256=Gk00lu1Lv0GRSNeF5M4zplp3UMSpe5byCaVKCJimUH
257
259
  aurelian/utils/pytest_report_to_markdown.py,sha256=WH1NlkVYj0UfUqpXjRD1KMpkMgEW3qev3fDdPvZG9Yw,1406
258
260
  aurelian/utils/robot_ontology_utils.py,sha256=aaRe9eyLgJCtj1EfV13v4Q7khFTWzUoFFEE_lizGuGg,3591
259
261
  aurelian/utils/search_utils.py,sha256=9MloT3SzOE4JsElsYlCznp9N6fv_OQK7YWOU8MIy1WU,2818
260
- aurelian-0.3.4.dist-info/LICENSE,sha256=FB6RpUUfbUeKS4goWrvpp1QmOtyywrMiNBsYPMlLT3A,1086
261
- aurelian-0.3.4.dist-info/METADATA,sha256=o6MapyVbBF6DMGrYZMYBNc-JKm2q-uv3qjSVCwuXR0E,3471
262
- aurelian-0.3.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
263
- aurelian-0.3.4.dist-info/entry_points.txt,sha256=BInUyPfLrHdmH_Yvi71dx21MhkcNCEOPiqvpEIb2U5k,46
264
- aurelian-0.3.4.dist-info/RECORD,,
262
+ aurelian-0.4.2.dist-info/LICENSE,sha256=FB6RpUUfbUeKS4goWrvpp1QmOtyywrMiNBsYPMlLT3A,1086
263
+ aurelian-0.4.2.dist-info/METADATA,sha256=Wtded6_NxBHSXTCFxjUcXUrbLz00vOQgoy7xsHPM8YM,3557
264
+ aurelian-0.4.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
265
+ aurelian-0.4.2.dist-info/entry_points.txt,sha256=EnGehbtRm0YmhdfwfcoGJjVG3Man-zgKvob20fTIBik,102
266
+ aurelian-0.4.2.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ [console_scripts]
2
+ aurelian=aurelian.cli:main
3
+ aurelian-mcp-gocam=aurelian.agents.gocam.gocam_mcp:main
4
+
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- aurelian=aurelian.cli:main
3
-