{"openapi":"3.1.0","info":{"title":"Patent classification & search API","description":"Pinecone による IPC/CPC/FI のハイブリッド検索（POST /search）は、多概念展開（上位⇒下位の複数パターン生成と結果統合）をサーバ側で必ず実行します。コード直接検索（GET /classify/{namespace}/{code} / POST /classify/batch）はPinecone の Fetch API でメタデータを取得します（ベクトル検索不要）。LLM による特許検索式の下書き（POST /llm/patent-search-expression）。既定モデルは Gemini（gemini-flash-lite-latest）。検索式は必ず各データベースの公式マニュアルで検証してください。","version":"0.6.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Health Get"}}}}}}},"/search":{"post":{"tags":["search"],"summary":"Search","operationId":"search_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/classify/{namespace}/{code}":{"get":{"tags":["classify"],"summary":"コード 1 件を直接取得","description":"指定した名前空間（ipc/cpc/fi/fterm）のコードを Pinecone から直接取得します。 `code` はスラッシュを含む分類コードをそのまま渡してください（例: `H01L21/02`）。","operationId":"classify_single_classify__namespace___code__get","parameters":[{"name":"namespace","in":"path","required":true,"schema":{"enum":["ipc","cpc","fi","fterm"],"type":"string","title":"Namespace"}},{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyCodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/classify/batch":{"post":{"tags":["classify"],"summary":"コードを複数まとめて取得","description":"最大 200 件のコードを Pinecone から一括取得します。 `namespace` に系統（ipc/cpc/fi/fterm）を指定してください。 見つからなかったコードは `not_found` に返ります。","operationId":"classify_batch_classify_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyCodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llm/patent-search-expression":{"post":{"tags":["llm"],"summary":"Patent Search Expression","description":"自然言語から特許検索式（論理式）の下書きを LLM が生成する。","operationId":"patent_search_expression_llm_patent_search_expression_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatentSearchExpressionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatentSearchExpressionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ClassifyCodeHit":{"properties":{"namespace":{"type":"string","title":"Namespace"},"id":{"type":"string","title":"Id","default":""},"symbol":{"type":"string","title":"Symbol","default":""},"def_en":{"type":"string","title":"Def En","default":""},"def_ja":{"type":"string","title":"Def Ja","default":""},"ipc":{"type":"string","title":"Ipc","default":""},"theme":{"type":"string","title":"Theme","default":""},"def":{"type":"string","title":"Def","description":"Fターム用 def フィールド","default":""}},"type":"object","required":["namespace"],"title":"ClassifyCodeHit"},"ClassifyCodeRequest":{"properties":{"namespace":{"type":"string","enum":["ipc","cpc","fi","fterm"],"title":"Namespace","description":"ipc / cpc / fi / fterm のいずれか"},"codes":{"items":{"type":"string"},"type":"array","maxItems":200,"minItems":1,"title":"Codes","description":"取得したい分類コードの一覧（例: ['H01L21/02', 'G06N3/08']）"}},"type":"object","required":["namespace","codes"],"title":"ClassifyCodeRequest","description":"コード直接検索リクエスト（バッチ用）。"},"ClassifyCodeResponse":{"properties":{"total":{"type":"integer","title":"Total"},"results":{"items":{"$ref":"#/components/schemas/ClassifyCodeHit"},"type":"array","title":"Results"},"not_found":{"items":{"type":"string"},"type":"array","title":"Not Found","description":"Pinecone に登録が無かったコード"}},"type":"object","required":["total","results"],"title":"ClassifyCodeResponse"},"ConceptPatternItem":{"properties":{"dimension":{"type":"string","title":"Dimension"},"ladder":{"items":{"type":"string"},"type":"array","title":"Ladder"},"search_query":{"type":"string","title":"Search Query"},"embedding_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Embedding Query"}},"type":"object","required":["dimension","ladder","search_query"],"title":"ConceptPatternItem"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PatentSearchExpressionRequest":{"properties":{"user_prompt":{"type":"string","title":"User Prompt","description":"検索したい内容の自然言語説明"},"base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Url","description":"LLM API のベース URL。**通常は空のままにしてください**。未指定時は環境変数 OPENAI_BASE_URL（Gemini 互換エンドポイント）を使用します。"},"model":{"type":"string","title":"Model","description":"Chat モデル名（既定は環境変数 OPENAI_MODEL または gemini-flash-lite-latest）","default":"gemini-flash-lite-latest"},"target":{"type":"string","enum":["jplatpat_like","generic_boolean"],"title":"Target","description":"jplatpat_like: J-PlatPat 風の高度検索に近い形式 / generic_boolean: 汎用ブール式","default":"jplatpat_like"},"use_classification_api":{"type":"boolean","title":"Use Classification Api","description":"同一 user_prompt で Pinecone（POST /search と同じ索引）を検索し、分類候補を LLM に渡す","default":true},"classification_namespaces":{"anyOf":[{"items":{"type":"string","enum":["ipc","cpc","fi","fterm"]},"type":"array"},{"type":"null"}],"title":"Classification Namespaces","description":"未指定時は ipc, cpc, fi"},"classification_top_k":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Classification Top K","default":5},"classification_dense_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Classification Dense Model","description":"分類検索の dense モデル。未指定時は llama-text-embed-v2"},"classification_sparse_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Classification Sparse Model","description":"分類検索の sparse モデル。未指定時は pinecone-sparse-english-v0"},"classification_alpha":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Classification Alpha","description":"分類検索時の Dense/Sparse 重み。1.0=denseのみ, 0.0=sparseのみ","default":0.5},"use_concept_ladder_for_classification":{"type":"boolean","title":"Use Concept Ladder For Classification","description":"要望文から上位⇒下位の複数パターンを LLM で作り、各パターンで分類検索して統合する（既定で有効）","default":true}},"type":"object","required":["user_prompt"],"title":"PatentSearchExpressionRequest","description":"自然言語から特許検索式（論理式）を LLM が生成する。"},"PatentSearchExpressionResponse":{"properties":{"expression":{"type":"string","title":"Expression"},"espacenet_smart":{"type":"string","title":"Espacenet Smart","default":""},"wipo_patentscope":{"type":"string","title":"Wipo Patentscope","default":""},"google_patents":{"type":"string","title":"Google Patents","default":""},"lens_org":{"type":"string","title":"Lens Org","default":""},"uspto_patentsview":{"type":"string","title":"Uspto Patentsview","default":""},"notes":{"type":"string","title":"Notes","default":""},"model":{"type":"string","title":"Model"},"classification_hits":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Classification Hits","description":"分類 API（Pinecone）で取得したヒット。未使用時は空"}},"type":"object","required":["expression","model"],"title":"PatentSearchExpressionResponse"},"PatternHitCount":{"properties":{"dimension":{"type":"string","title":"Dimension"},"hit_count":{"type":"integer","title":"Hit Count"}},"type":"object","required":["dimension","hit_count"],"title":"PatternHitCount"},"SearchHit":{"properties":{"namespace":{"type":"string","title":"Namespace"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"symbol":{"type":"string","title":"Symbol","default":""},"def_en":{"type":"string","title":"Def En","default":""},"def_ja":{"type":"string","title":"Def Ja","default":""},"ipc":{"type":"string","title":"Ipc","default":""},"matched_dimensions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Matched Dimensions","description":"マージ時に寄与した切り口（多概念展開時のみ）"},"matched_queries":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Matched Queries","description":"マージ時に使った埋め込みクエリ（多概念展開時のみ）"}},"type":"object","required":["namespace"],"title":"SearchHit"},"SearchRequest":{"properties":{"query":{"type":"string","title":"Query","description":"検索クエリ（日本語・英語可）"},"namespaces":{"items":{"type":"string","enum":["ipc","cpc","fi","fterm"]},"type":"array","title":"Namespaces","description":"検索する名前空間（複数可）","default":["ipc","cpc","fi"]},"top_k":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top K","default":10},"dense_model":{"type":"string","title":"Dense Model","default":"llama-text-embed-v2"},"sparse_model":{"type":"string","title":"Sparse Model","default":"pinecone-sparse-english-v0"},"alpha":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Alpha","description":"Dense/Sparse の重み。1.0=denseのみ, 0.0=sparseのみ","default":0.5},"sort_by_score":{"type":"boolean","title":"Sort By Score","description":"全 namespace の結果を score 降順で並べ替える","default":true},"translate_query_to_english":{"type":"boolean","title":"Translate Query To English","description":"埋め込み前に OpenAI でクエリを英語化（dense/sparse が英語向けのため推奨）","default":true},"translate_model":{"type":"string","title":"Translate Model","description":"英訳に使う Chat モデル（既定: gemini-flash-lite-latest）","default":"gemini-flash-lite-latest"},"openai_base_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Openai Base Url","description":"LLM API のベース URL。**通常は空のままにしてください**。未指定時は環境変数 OPENAI_BASE_URL（Gemini 互換エンドポイント）を使用します。"},"concept_ladder_min_patterns":{"type":"integer","maximum":8.0,"minimum":2.0,"title":"Concept Ladder Min Patterns","description":"LLM が生成する概念パターン数の下限","default":3},"concept_ladder_max_patterns":{"type":"integer","maximum":10.0,"minimum":2.0,"title":"Concept Ladder Max Patterns","description":"LLM が生成する概念パターン数の上限","default":6},"concept_ladder_model":{"type":"string","title":"Concept Ladder Model","description":"上位⇒下位概念の多パターン生成に使う Chat モデル（既定: gemini-flash-lite-latest）","default":"gemini-flash-lite-latest"}},"type":"object","required":["query"],"title":"SearchRequest","description":"Pinecone に対するハイブリッド検索リクエスト。"},"SearchResponse":{"properties":{"total":{"type":"integer","title":"Total"},"results":{"items":{"$ref":"#/components/schemas/SearchHit"},"type":"array","title":"Results"},"concept_patterns":{"items":{"$ref":"#/components/schemas/ConceptPatternItem"},"type":"array","title":"Concept Patterns","description":"LLM が生成した上位⇒下位の概念パターン（実行必須）"},"per_pattern_hit_counts":{"items":{"$ref":"#/components/schemas/PatternHitCount"},"type":"array","title":"Per Pattern Hit Counts","description":"パターンごとの生ヒット件数（全 namespace 合算）"}},"type":"object","required":["total","results"],"title":"SearchResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}