{"nodes": [{"id": "users_gurpreet_github_odoo_modules_fusion_accounting_ai_services_adapters_claude_py", "label": "claude.py", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L1"}, {"id": "claude_claudeadapter", "label": "ClaudeAdapter", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L17"}, {"id": "llmprovider", "label": "LLMProvider", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "claude_claudeadapter_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L30"}, {"id": "claude_claudeadapter_complete", "label": ".complete()", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L49"}, {"id": "claude_fusionaccountingadapterclaude", "label": "FusionAccountingAdapterClaude", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L75"}, {"id": "claude_fusionaccountingadapterclaude_get_client", "label": "._get_client()", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L79"}, {"id": "claude_fusionaccountingadapterclaude_get_model_name", "label": "._get_model_name()", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L95"}, {"id": "claude_fusionaccountingadapterclaude_format_tools", "label": "._format_tools()", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L99"}, {"id": "claude_fusionaccountingadapterclaude_supports_extended_thinking", "label": "._supports_extended_thinking()", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L110"}, {"id": "claude_fusionaccountingadapterclaude_call_with_tools", "label": ".call_with_tools()", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L113"}, {"id": "claude_fusionaccountingadapterclaude_append_tool_results", "label": ".append_tool_results()", "file_type": "code", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L176"}, {"id": "claude_rationale_18", "label": "Plain-Python LLMProvider implementation for Anthropic Claude. Preserves all", "file_type": "rationale", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L18"}], "edges": [{"source": "users_gurpreet_github_odoo_modules_fusion_accounting_ai_services_adapters_claude_py", "target": "json", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L1", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_accounting_ai_services_adapters_claude_py", "target": "logging", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L2", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_accounting_ai_services_adapters_claude_py", "target": "odoo", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L4", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_accounting_ai_services_adapters_claude_py", "target": "odoo_exceptions", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L5", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_accounting_ai_services_adapters_claude_py", "target": "users_gurpreet_github_odoo_modules_fusion_accounting_ai_services_adapters_base_py", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L7", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_accounting_ai_services_adapters_claude_py", "target": "anthropic", "relation": "imports", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L12", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_accounting_ai_services_adapters_claude_py", "target": "claude_claudeadapter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L17", "weight": 1.0}, {"source": "claude_claudeadapter", "target": "llmprovider", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L17", "weight": 1.0}, {"source": "claude_claudeadapter", "target": "claude_claudeadapter_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L30", "weight": 1.0}, {"source": "claude_claudeadapter", "target": "claude_claudeadapter_complete", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L49", "weight": 1.0}, {"source": "users_gurpreet_github_odoo_modules_fusion_accounting_ai_services_adapters_claude_py", "target": "claude_fusionaccountingadapterclaude", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L75", "weight": 1.0}, {"source": "claude_fusionaccountingadapterclaude", "target": "claude_fusionaccountingadapterclaude_get_client", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L79", "weight": 1.0}, {"source": "claude_fusionaccountingadapterclaude", "target": "claude_fusionaccountingadapterclaude_get_model_name", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L95", "weight": 1.0}, {"source": "claude_fusionaccountingadapterclaude", "target": "claude_fusionaccountingadapterclaude_format_tools", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L99", "weight": 1.0}, {"source": "claude_fusionaccountingadapterclaude", "target": "claude_fusionaccountingadapterclaude_supports_extended_thinking", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L110", "weight": 1.0}, {"source": "claude_fusionaccountingadapterclaude", "target": "claude_fusionaccountingadapterclaude_call_with_tools", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L113", "weight": 1.0}, {"source": "claude_fusionaccountingadapterclaude", "target": "claude_fusionaccountingadapterclaude_append_tool_results", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L176", "weight": 1.0}, {"source": "claude_fusionaccountingadapterclaude_call_with_tools", "target": "claude_fusionaccountingadapterclaude_get_client", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L114", "weight": 1.0}, {"source": "claude_fusionaccountingadapterclaude_call_with_tools", "target": "claude_fusionaccountingadapterclaude_get_model_name", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L115", "weight": 1.0}, {"source": "claude_fusionaccountingadapterclaude_call_with_tools", "target": "claude_fusionaccountingadapterclaude_format_tools", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L129", "weight": 1.0}, {"source": "claude_fusionaccountingadapterclaude_call_with_tools", "target": "claude_fusionaccountingadapterclaude_supports_extended_thinking", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L131", "weight": 1.0}, {"source": "claude_rationale_18", "target": "claude_claudeadapter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L18", "weight": 1.0}], "raw_calls": [{"caller_nid": "claude_claudeadapter_init", "callee": "super", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L31"}, {"caller_nid": "claude_claudeadapter_init", "callee": "UserError", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L33"}, {"caller_nid": "claude_claudeadapter_init", "callee": "_", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L33"}, {"caller_nid": "claude_claudeadapter_init", "callee": "sudo", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L34"}, {"caller_nid": "claude_claudeadapter_init", "callee": "get_api_key", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L36"}, {"caller_nid": "claude_claudeadapter_init", "callee": "get_param", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L42"}, {"caller_nid": "claude_claudeadapter_init", "callee": "Anthropic", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L45"}, {"caller_nid": "claude_claudeadapter_init", "callee": "get_param", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L46"}, {"caller_nid": "claude_claudeadapter_complete", "callee": "get", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L51"}, {"caller_nid": "claude_claudeadapter_complete", "callee": "create", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L54"}, {"caller_nid": "claude_claudeadapter_complete", "callee": "error", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L62"}, {"caller_nid": "claude_claudeadapter_complete", "callee": "UserError", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L63"}, {"caller_nid": "claude_claudeadapter_complete", "callee": "_", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L63"}, {"caller_nid": "claude_claudeadapter_complete", "callee": "str", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L63"}, {"caller_nid": "claude_claudeadapter_complete", "callee": "getattr", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L64"}, {"caller_nid": "claude_claudeadapter_complete", "callee": "join", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L66"}, {"caller_nid": "claude_claudeadapter_complete", "callee": "getattr", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L68"}, {"caller_nid": "claude_claudeadapter_complete", "callee": "getattr", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L69"}, {"caller_nid": "claude_fusionaccountingadapterclaude_get_client", "callee": "UserError", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L81"}, {"caller_nid": "claude_fusionaccountingadapterclaude_get_client", "callee": "_", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L81"}, {"caller_nid": "claude_fusionaccountingadapterclaude_get_client", "callee": "get_api_key", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L83"}, {"caller_nid": "claude_fusionaccountingadapterclaude_get_client", "callee": "sudo", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L89"}, {"caller_nid": "claude_fusionaccountingadapterclaude_get_client", "callee": "get_param", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L90"}, {"caller_nid": "claude_fusionaccountingadapterclaude_get_client", "callee": "UserError", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L92"}, {"caller_nid": "claude_fusionaccountingadapterclaude_get_client", "callee": "_", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L92"}, {"caller_nid": "claude_fusionaccountingadapterclaude_get_client", "callee": "Anthropic", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L93"}, {"caller_nid": "claude_fusionaccountingadapterclaude_get_model_name", "callee": "sudo", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L96"}, {"caller_nid": "claude_fusionaccountingadapterclaude_get_model_name", "callee": "get_param", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L97"}, {"caller_nid": "claude_fusionaccountingadapterclaude_format_tools", "callee": "get", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L105"}, {"caller_nid": "claude_fusionaccountingadapterclaude_format_tools", "callee": "append", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L107"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "append", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L120"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "create", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L138"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "lower", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L140"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "str", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L140"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "pop", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L141"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "create", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L142"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "UserError", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L144"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "_", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L144"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "str", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L144"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "error", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L146"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "UserError", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L147"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "_", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L147"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "str", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L147"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "append", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L154"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "append", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L156"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "append", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L162"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "debug", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L165"}, {"caller_nid": "claude_fusionaccountingadapterclaude_call_with_tools", "callee": "join", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L168"}, {"caller_nid": "claude_fusionaccountingadapterclaude_append_tool_results", "callee": "get", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L178"}, {"caller_nid": "claude_fusionaccountingadapterclaude_append_tool_results", "callee": "hasattr", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L179"}, {"caller_nid": "claude_fusionaccountingadapterclaude_append_tool_results", "callee": "append", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L181"}, {"caller_nid": "claude_fusionaccountingadapterclaude_append_tool_results", "callee": "append", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L183"}, {"caller_nid": "claude_fusionaccountingadapterclaude_append_tool_results", "callee": "append", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L190"}, {"caller_nid": "claude_fusionaccountingadapterclaude_append_tool_results", "callee": "append", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L194"}, {"caller_nid": "claude_fusionaccountingadapterclaude_append_tool_results", "callee": "append", "source_file": "/Users/gurpreet/Github/Odoo-Modules/fusion_accounting_ai/services/adapters/claude.py", "source_location": "L199"}]}